Selenium 使用 cookie 绕过验证码,为什么在一个系统上可以,换一个系统就不行了

testjson · 2023年02月16日 · 最后由 IC 回复于 2023年02月20日 · 12607 次阅读

下面这个是用于获取 cookie 的代码,还有添加 cookie 的代码

#获取cookie,用于绕过滑块验证码
    def get_cookie(self):
        self.driver.get(env_url)
        time.sleep(30)
        cookie = self.driver.get_cookies()
        with open("../config/cookie.yml","w") as f:
            yaml.safe_dump(cookie,f)

    #添加cookie,用于绕过滑块验证码
    def add_cookie(self,url):
        self.driver.get(env_url)
        cookies = yaml.safe_load(open("../config/cookie.yml"))
        for cookie in cookies:
            self.driver.add_cookie(cookie)
        self.driver.get(url)
        time.sleep(10)
url = 'http://xxx/supply/supplyHomeUrl'
driver = webdriver.Chrome()
driver.maximize_window()
b = AddBasicPolicyPage(driver)
# b.get_cookie()
b.wait(2)
b.add_cookie(b.url)
b.add_basic_policy()
b.quit()

我们的平台有多个系统,登录的时候会有滑块验证码,我想通过 cookie 绕过验证码,在第一个系统使用时正常能绕过
在另外一个系统使用这种方式就出现了问题

共收到 10 条回复 时间 点赞


是这种滑块验证码

看下 console 有没有报错,也问下开发是不是有 cookies 之外的鉴权机制?

你的绕过验证码的意思是,不显示验证码,还是显示验证码,即使不输入验证码或是输入错误的也能登录?

多个系统的 cookies 是共用的吗

对 陈恒捷 回复

看了下 console 是有报错,原来是报错的这个系统,除了要获取登录账号的 cookie,还有获取 Ttid,是我们系统的一个识别登录用户身份的一个 ID,看来通过 cookie 绕过不太可行,我只能取找开发把滑块验证码注释了

对 干饭狂人 回复

是通过获取到 cookie,不用输入验证码,直接登录

对 tangoliver 回复

不是,系统有个角色权限进行配置的

用 cv2 算一下距离,滑一下就行了

实现原理能说下吗?活着看看实际的代码?add_basic_policy 这个?

楼主的做法是将 token 先存到 cookie 里,前端能拿到 token 的情况下就认为是登陆了,就不会跳转到验证页面,最后说缺了 Ttid 字段,也是接口要用到,前端取不到这个字段就判断当前是处于未登陆状态,就跳转到验证页面。冷知识,其实部分公司会将用户信息字段放到 token 里,你去解析 token 可能会有惊喜

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册。