0%

Selenium真正绕过webdriver检测

selenium 有很多种被别的平台侦测出的办法,所以,这一篇讲讲述,如何隐藏 selenium 的各种特性。

有些网址通过 webdriver 检测使得 Selenium 无法获取元素、无法控制按钮等情况

参考资料

普通浏览器打开

一般来说,点击

会出现下面

webdriver 打开

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
from selenium import webdriver

class WebDriverChrome(object):

def __init__(self):
self.driver = self.StartWebdriver()

def StartWebdriver(self):
options = webdriver.ChromeOptions()
options.add_argument("start-maximized")
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option("useAutomationExtension", False)
driver = webdriver.Chrome(options=options)
return driver

def RunStart(self):
self.driver.get('https://bot.sannysoft.com')
# time.sleep(10)
# self.driver.quit()

if __name__ == '__main__':
Crawl = WebDriverChrome()
Crawl.RunStart()

出现

Js注入真正绕过webdriver的检测属性

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
from selenium import webdriver

class WebDriverChrome(object):

def __init__(self):
self.driver = self.StartWebdriver()

def StartWebdriver(self):
options = webdriver.ChromeOptions()
options.add_argument("start-maximized")
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option("useAutomationExtension", False)
driver = webdriver.Chrome(options=options)
with open('./stealth.min.js') as f:
js = f.read()
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
"source": js
})
return driver

def RunStart(self):
self.driver.get('https://bot.sannysoft.com')
# time.sleep(10)
# self.driver.quit()


if __name__ == '__main__':
Crawl = WebDriverChrome()
Crawl.RunStart()

stealth.min.js 生成

安装node.js

npx extract-stealth-evasions

就会在你执行命令的文件夹下面生成一个 stealth.min.js 文件

这里我提供一下下载方式。

下载 stealth.min.js

ps: 除了使用 js 注入之外, chrome 还提供很多参数,来隐藏,来达到相同的效果,具体可以参考

请我喝杯咖啡吧~