去掉selenium的webdriver痕迹,防浏览器检查+滑动滑块

 ·  2022-08-10

一、去掉selenium的webdriver痕迹

问题:

使用selenium+chromedriver启动chrome的时候,会在chrome的navigator以及document对象里注入一些属性,如果web服务器返回的js代码里有对这些属性的检测,那我们就会被识别为机器人在访问。如果进行UI自动化例如滑块等,就会无法进行。
未添加属性是F12里的consloe 使用window.navigator.webdriver可直接检查到webdriver被控制返回true

2023-12-08T15:41:05.png

解决方式:

webdriver.ChromeOptions增加一些属性

class TestGetCaptcha:

    def setup_class(self):
        # 去掉selenium烦人的webdriver痕迹,防检测
        chrome_options = webdriver.ChromeOptions()
        chrome_options.add_experimental_option(
            "excludeSwitches", ["enable-automation"])
        chrome_options.add_experimental_option('useAutomationExtension', False)
        chrome_options.add_argument('lang=zh-CN,zh,zh-TW,en-US,en')
        chrome_options.add_argument(
            'user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36')

        self.driver = webdriver.Chrome(chrome_options=chrome_options)

查看window.navigator.webdriver可直接检查到webdriver被控制返回false
2023-12-08T15:38:32.png

二、滑动滑块

    def test_get_captcha(self):
        self.driver.get(url=r'D:/cs.html')
        time.sleep(3)
        self.driver.switch_to.frame('tcaptcha_iframe')
        flag = 0
        res = {}
        while flag == 0:

            ele = self.driver.find_element(By.ID, 'slideBlock')
            action = ActionChains(self.driver)
            action.drag_and_drop_by_offset(ele, 110, 0).perform()
            action.click(ele).perform()
            time.sleep(2)
            try:
                res = self.driver.execute_script('return captcha.getTicket()')
                print(res)
                if res.get('ticket') != '':
                    flag = 1
                else:
                    self.driver.refresh()
                    time.sleep(2)
            except:
                pass

        return res
评论
猪芳芳. All Rights Reserved. Theme Jasmine by Kent Liao.