最近在写自动化测试的时候遇到了滑块验证码问题,我这里教大家使用添加cookies绕过登录
以网易网盾网站实验:
代码内有具体注释
from selenium import webdriver
import os
import time
import pickle
#获取cookies
def get_cookies(self, url, name):
#打开目标网址
self.driver.get(url)
#这一步很关键,需要清除当前未登录状态的cookies
self.driver.delete_all_cookies()
#这一步,第一次登陆,等待30秒,有时间让我们手动登录,获取登录后的cookies
time.sleep(30)
#python中一种存储文件的方式,将获取的cookies存起来
pickle.dump(self.driver.get_cookies(), open(name, 'wb'))
#读取cookies
def read_cookies(self, url, name):
#如果文件存在就读取,否则就创建,方便下次使用
if os.path.exists(name):
readPath = open(name, 'rb')
dcCookies = pickle.load(readPath)
else:
dcCookies = self.get_cookies(url, name)
return dcCookies
def loginPage(self):
self.driver = webdriver.Chrome()
# self.driver.delete_all_cookies()
# self.driver.refresh()
# time.sleep(8)
self.driver.get('https://dun.163.com/')
self.driver.maximize_window()
ele0 = self.driver.find_element_by_xpath('//*[@id="details-button"]')
ele0.click()
ele1 = self.driver.find_element_by_xpath('//*[@id="proceed-link"]')
ele1.click()
self.driver.delete_all_cookies() ##清除当前状态的cookies
cookies = self.read_cookies(self.url1, 'cookie.pk1')
# self.driver.refresh()
# time.sleep(3)
#因为cookies不止一条,所以要用循环逐条添加
for cookie in cookies:
self.driver.add_cookie(cookie)
time.sleep(3)
# self.driver.refresh() 这一步有时候需要有时候不需要没搞明白
另外在第一次登录的时候需要先手动登录,以便能够获取登录后的cookies
不过这种方法只能使用几次,一般第二天的时候又需要手动登陆一次
具体的Xpath路径需要自己获取