# 在使用 selenium
进行页面抓取的时候,有时候会遇到一些对 selenium
的反爬措施
一般常见的反爬手段是通过检测
window.navigator
的webdriver
属性,正常浏览器没有这个属性,直接访问正常是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 被浏览器检测的地方有很多,上面修改只针对部分网站,并不适用所有。