python+selenium解决写入cookie成功,但仍然是
最近开始学习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能够登录成功,当然更好。但是我失败了,这就作为一种方法,记录一下吧。