selenium+python,driver.add_cookie()跳过登录验证码

当登录功能需要验证码时,我们可以使用driver.add_cookie()方法跳过验证码
1、首先看wevdriver中add_cookie方法:

def add_cookie(self, cookie_dict):
    """
    Adds a cookie to your current session.
    :Args:
     - cookie_dict: A dictionary object, with required keys - "name" and "value";
        optional keys - "path", "domain", "secure", "expiry"
    Usage:
        driver.add_cookie({'name' : 'foo', 'value' : 'bar'})
        driver.add_cookie({'name' : 'foo', 'value' : 'bar', 'path' : '/'})
        driver.add_cookie({'name' : 'foo', 'value' : 'bar', 'path' : '/', 'secure':True})
    """
    self.execute(Command.ADD_COOKIE, {'cookie': cookie_dict})

可知我们使用该方法需要传一个cookie_dict参数

2、这个cookie_dict,我们可以通过抓包工具,获取cookie,如下图
登录操作后,charles抓取得返回cookie

3、在代码中使用,举例代码如下:

ck01 = {
    u'domain': u'.ggg.com',
    u'name':u'SWOFT_SESSION_ID',
    u'value': u'aaaaaaaaaaaaaaaaaaaaaaaaaa',
    u'expiry': 1767196799,
    u'path': u'/',
    u'httpOnly': True,
    u'secure': False
}
ck02 = {
    u'domain': u'.ggg.com',
    u'name':u'AUTH_TOKEN',
    u'value': u'bbbbbbbbbbbbbbbbbbbbbbbbb',
    u'expiry': 1767196799,
    u'path': u'/',
    u'httpOnly': True,
    u'secure': False
}
ck03 = {
    u'domain': u'.ggg.com',
    u'name':u'PHPSESSID',
    u'value': u'cccccccccccccccccccccccccccccccc',
    u'expiry': 1767196799,
    u'path': u'/',
    u'httpOnly': True,
    u'secure': False
}
driver.get("https://m.xxx.com/page/User/")
driver.add_cookie(ck01)
driver.add_cookie(ck02)
driver.add_cookie(ck03)
driver.refresh()#刷新页面 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这段代码存在以下问题: 1. 函数的参数使用了*,但是没有在函数使用,这会让函数的使用者很困惑; 2. 导入模块时没有按照PEP8规范,应该单独一行导入; 3. 函数名不够清晰,无法准确地表达函数的功能; 4. 函数调用了硬编码的文件路径,应该使用参数或配置文件来管理路径; 5. 函数的注释不够详细,无法帮助使用者理解函数的实现原理; 6. 函数没有对异常进行处理,如文件读取异常等; 7. 函数的代码结构不够清晰,影响可读性。 修改后的代码如下: ```python import json from selenium import webdriver def create_chrome_driver(headless=False, executable_path=None): """ 创建谷歌浏览器对象,用selenium控制浏览器访问url :param headless: 是否为无头模式,默认为False :param executable_path: ChromeDriver的路径,默认为None :return: 创建好的浏览器对象 """ options = webdriver.ChromeOptions() if headless: options.add_argument('--headless') # 做一些控制上的优化 options.add_experimental_option('excludeSwitches', ['enable-automation']) options.add_experimental_option('useAutomationExtension', False) # 创建浏览器对象 browser = webdriver.Chrome(options=options, executable_path=executable_path) # 破解反爬措施 browser.execute_cdp_cmd( 'Page.addScriptToEvaluateOnNewDocument', {'source': 'Object.defineProperty(navigator, "webdriver", {get: () => undefined})'} ) return browser def add_cookies(browser, cookie_file): """ 给浏览器对象添加登录cookie :param browser: 浏览器对象 :param cookie_file: cookie文件路径 :return: None """ with open(cookie_file, 'r') as file: cookie_list = json.load(file) for cookie_dict in cookie_list: if cookie_dict.get('secure', False): browser.add_cookie(cookie_dict) ``` 修改后的代码使用了更好的函数名,将路径信息使用参数传入,增加了注释,使用了更好的异常处理方式,代码结构更加清晰易读。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值