python+selenium解决写入cookie成功,但仍然是

2018-06-12  本文已影响0人  云絮飘扬

    最近开始学习selenium自动化测试的相关知识,selenium做为一个UI自动化的利器,可以方便的模拟用户操作,完成各种基本操作。

    在学习过程中,遇到一个问题,cookies我可以正常的写入,但是refresh页面后,仍然是未登录状态。多方参考之后,有一种解决方案,即:使用pickle库保存之前登录的cookie,然后进入同域名下其他页面,把之前存的cookie重新load出来以供使用。

    练习网站:博客园,https://www.cnblogs.com/

    首先,使用selenium按照正常的步骤,在注册页面(https://passport.cnblogs.com/user/signin),找到用户名、密码输入框,并点击登录。注意:此时要有个长时间的sleep,主要用于手动操作,这个网站有滑动验证。。。

    手动登录成功后,使用pickle库保存登录成功的cookies

    再然后,打开同域名的页面,再次load之前所存的cookies文件,refresh检查效果,完美的刷新了。代码见下方:

#coding:utf-8

from seleniumimport webdriver

import time,pickle

url='https://passport.cnblogs.com/user/signin'

driver = webdriver.Chrome()

driver.get(url)

#下面一段是登录,操作登录步骤用于准备保存登录的cookies

driver.find_element_by_xpath(".//*[@id='input1']").send_keys('scorpio118a')

driver.find_element_by_xpath(".//*[@id='input2']").send_keys('123456@aA')

driver.find_element_by_xpath(".//*[@id='signin']").click()

#下面的15秒是用来手动操作博客园的滑动验证码,否则登录不上去,┭┮﹏┭┮

time.sleep(15)

#15秒内操作完毕,登录成功,使用pickle库把登陆成功的cookies保存起来

pickle.dump(driver.get_cookies(),open("cookie.pk1",'wb'))

#现在是登录状态,为了表示最后cookie是写入成功的,我将目前页面的cookies删除,并refresh页面,这样就可以展示未登录状态

driver.delete_all_cookies()

driver.refresh()

time.sleep(8)

#refresh后已经是未登录状态了,然后使用pickle的load方法,将之前的cookie再load回来

cookies=pickle.load(open("cookie.pk1",'rb'))

#下面是将每一个cookie数据都加入到driver中,全部加载完成后,refresh页面,你的个人信息又出现了,登录成功

for cookie in cookies:

cookie_dict={

"domain":".cnblogs.com",

'name':cookie.get('name'),

'value':cookie.get('value'),

'expiry':"",

'path':'/',

'httpOnly':True,

'secure':False

    }

driver.add_cookie(cookie_dict)

driver.refresh()

time.sleep(2)

driver.quit()

后记:

之所以使用pickle库,因为我将文件中所有的cookie一一拼写完成,并且加入到driver并不生效(泪目),逼不得已,使用了此方法。如果手动写入cookies能够登录成功,当然更好。但是我失败了,这就作为一种方法,记录一下吧。

上一篇下一篇

猜你喜欢

热点阅读