# 在使用 selenium 进行页面抓取的时候,有时候会遇到一些对 selenium 的反爬措施

  • 一般常见的反爬手段是通过检测 window.navigatorwebdriver 属性,正常浏览器没有这个属性,直接访问正常是 undefined 或者 false , 浏览器版本不同不太一样,我用的新版 chrome 浏览器.

    如果用 selenium 启动浏览器返回的结果是 true .

  • execute_script 直接置空是不可以的,因为 execute_script 方法是在页面渲染完之后才执行的,已经被检测过了;我们可以用 CDP(Chrome Devtools-Protocol) 命令处理这个属性,并用 excludeSwitches 关掉浏览器下图所示的提示条。

    代码:

    from selenium.webdriver import Chrome
    from selenium.webdriver import ChromeOptions
    options = ChromeOptions()
    # 关掉提示条
    options.add_experimental_option('excludeSwitches', ['enable-automation'])
    options.add_experimental_option('useAutomationExtension', False)
    bro = Chrome(options=options)
    # 注入 js 修改 webdriver 的值,新版本浏览器返回 false 了,老版是 undefined
    bro.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
      "source": """
        Object.defineProperty(navigator, 'webdriver', {
          get: () => false
        })
      """
    })

    selenium 被浏览器检测的地方有很多,上面修改只针对部分网站,并不适用所有。

更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

渣渣文 微信支付

微信支付

渣渣文 支付宝

支付宝