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

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

下面这个是用于获取 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 可能会有惊喜

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