selenium使用cookie绕过验证码登录不成功

代码如下,不知道问题出在哪儿,请求返回的数据一直是没登录的数据

    def login_with_cookie(self, mobile: str):
        print(self._driver.get_cookies())
        select1 = self.find(By.ID, "thisIsSiteId")
        Select(select1).select_by_index(1)
        self.find(By.ID, "telphone").clear()
        self.find(By.ID, "telphone").send_keys(mobile)
        # 发送手机验证码
        self.find(By.ID, "getCaptcha").click()
        time.sleep(15)
        # 手动输入验证码后点击登录
        self.find(By.CSS_SELECTOR, ".submit").click()
        time.sleep(5)
        # 登录成功后获取cookies
        dict_cookie = self._driver.get_cookies()
        print(dict_cookie)
        # 退出系统后使用cookie登录
        self.find(By.CSS_SELECTOR, ".logout").click()
        # 使用cookie登录
        for cook in dict_cookie:
            self._driver.add_cookie(cook)
        time.sleep(10)
        self._driver.refresh()
        time.sleep(5)
        # 登录成功后做一个接口请求以验证登录成功
        r = requests.get(url="http://xxxxxxx.com")
        print(r.text)
        return r.text

你代码里已经退出登录了,退出后cookie就失效了。不能退出登录的
正确步骤

  1. 复用浏览器获取cookie
  2. 不复用浏览器,设置cookie,打开网站

我的理解是cookie已经保存下来了,退出登录才能使用cookie登录,只是退出登录,不是关闭浏览器,这个复用不复用浏览器也有关系么?

退出登录就会让你登录用的cookie失效
不然你下次打开网页为啥还需要登录呢

那如果这样的话我再新开一个浏览器还如何使用cookie去绕过验证码登录?

我是这样想的,我手动登录成功一次,拿到cookie,把这个cookie保存到一个变量里或者文件里,然后下次登录的时候直接读取cookie(我问这边开发了,说是cookie的有效时间挺长的),使用selenium的add_cookie添加后刷新页面不就可以实现登录了么?可是现在怎么也不行,是我哪里想的不对么?

  • 你这个思路是没问题的,但是你不要使用登出功能 这个功能相当于就把你已经保存的cookies给废弃掉了,那肯定就没办法用来绕过登录了。
  • 利用cookies绕过登录的核心思想就是通过保存cookies,在浏览器里制造一种没有关闭浏览器,还是在继续登录之后的浏览操作的假象,这样才能在访问的时候不需要再次登录。

思路正确,但是不要调退出登录接口,不然你保存在文件里的cookie就失效了,下次再使用文件里的cookie就有问题了。