selenium反屏蔽
2020-04-02 本文已影响0人
盗花
现在很多网站都加上了对Selenium的检测,来防止一些爬虫的恶意爬取。即如果检测到有人在使用Selenium打开浏览器,那就直接屏蔽。其大多数情况下,检测基本原理是检测当前浏览器窗口下的window.navigator对象是否包含webdriver这个属性。因为在正常使用浏览器的情况下,这个属性是undefined,然而一旦我们使用了Selenium,Selenium会给window.navigator设置webdriver属性。很多网站就通过 JavaScript 判断如果 webdriver 属性存在,那就直接屏蔽。
解决办法是使用CDP,在每个页面刚加载的时候执行script代码,使得navigator的webdriver属性为undefined。示例代码如下:
from selenium import webdriver
browser = webdriver.Chrome()
browser.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument', {
'source': 'Object.defineProperty(navigator, "webdriver", {get: () => undefined})'
})
browser.get('https://someurl')