我只是想知道我们使用调试模式浏览器的网页是否可以检测到,如以下代码:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
# already opened a browser in debugging mode at port 8989
opt = Options()
opt.add_experimental_option('debuggerAddress', 'localhost:8989')
driver=webdriver.Chrome(executable_path="my driver path", chrome_options=opt)
driver.get('http://google.com')
答案 0 :(得分:4)
是的,Selenium 很容易被检测到,尤其是所有主要的反机器人提供商(Cloudflare、Akamai 等)。
为什么?
Selenium 和大多数其他主要网络驱动程序将名为 navigator.webdriver
的浏览器变量(网站可以访问)设置为 true
。您可以前往 Google Chrome 控制台并运行 console.log(navigator.webdriver)
自行检查。如果您使用的是普通浏览器,它将是错误的。
用户代理,通常所有设备都有所谓的“用户代理”,这是指访问网站的设备。 Selenium 的用户代理看起来像这样:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/59.0.3071.115 Safari/537.36
。你抓到了吗?包括 HeadlessChrome
,这是另一种检测途径。
这些只是检测 Selenium 浏览器的多种方式中的两种,我强烈建议您也阅读 this 和 this。
最后,如果您想要一个简单、直接的解决方案来绕过检测,该解决方案实现了我们讨论过的几乎所有这些概念,我建议您使用 undetected-chromedriver。这是一个开源项目,它尽最大努力让您的 Selenium chromedriver 看起来更人性化。