有没有办法使用 geckodriver 使您的 Selenium 脚本在 Python 中检测不到?
我正在使用 Selenium 进行抓取。我们是否需要使用任何保护措施才能使网站无法检测到 Selenium?
原文由 user12285770 发布,翻译遵循 CC BY-SA 4.0 许可协议
有没有办法使用 geckodriver 使您的 Selenium 脚本在 Python 中检测不到?
我正在使用 Selenium 进行抓取。我们是否需要使用任何保护措施才能使网站无法检测到 Selenium?
原文由 user12285770 发布,翻译遵循 CC BY-SA 4.0 许可协议
有多种方法可以避免网站检测到 Selenium 的使用。
使用 Selenium 时,navigator.webdriver 的值默认设置为 true。此变量将出现在 Chrome 和 Firefox 中。此变量应设置为“未定义”以避免检测。
也可以使用代理服务器来避免检测。
某些网站能够使用浏览器的状态来确定您是否在使用 Selenium。您可以将 Selenium 设置为使用自定义浏览器配置文件来避免这种情况。
下面的代码使用了所有这三种方法。
profile = webdriver.FirefoxProfile('C:\\Users\\You\\AppData\\Roaming\\Mozilla\\Firefox\\Profiles\\something.default-release')
PROXY_HOST = "12.12.12.123"
PROXY_PORT = "1234"
profile.set_preference("network.proxy.type", 1)
profile.set_preference("network.proxy.http", PROXY_HOST)
profile.set_preference("network.proxy.http_port", int(PROXY_PORT))
profile.set_preference("dom.webdriver.enabled", False)
profile.set_preference('useAutomationExtension', False)
profile.update_preferences()
desired = DesiredCapabilities.FIREFOX
driver = webdriver.Firefox(firefox_profile=profile, desired_capabilities=desired)
代码运行后,您将能够手动检查由 Selenium 运行的浏览器现在是否具有您的 Firefox 历史记录和扩展。您还可以在 devtools 控制台中键入“navigator.webdriver”来检查它是否未定义。
原文由 CST 发布,翻译遵循 CC BY-SA 4.0 许可协议
2 回答5.1k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
1 回答1.7k 阅读✓ 已解决
1 回答1.2k 阅读✓ 已解决
2 回答1k 阅读✓ 已解决
2 回答708 阅读✓ 已解决
2 回答989 阅读✓ 已解决
2 回答11.2k 阅读
1 回答2.7k 阅读✓ 已解决
selenium 驱动的 Firefox / GeckoDriver 被检测到 的事实并不取决于任何特定 的 GeckoDriver 或 Firefox 版本。 网站 本身可以检测网络流量,并可以将 _浏览器客户端_(即 _Web 浏览器_)识别为 WebDriver 控制 的。
根据
WebDriver Interface
在最新的 WebDriver 编辑草稿中的文档 - W3C Living Documentwebdriver-active
最初设置为 false 的 _标志_,当用户代理处于下时设置为 true远程控制,即通过 Selenium 控制时。现在
NavigatorAutomationInformation
接口不应在WorkerNavigator
上公开。所以,
然而,
所以,底线是:
然而,一些避免在网络抓取时被检测到的通用方法如下:
time.sleep(secs)
。在这里你可以找到关于 如何让 python 中的 webdriver 睡眠毫秒 的详细讨论