为了使用ChromeDriver无法检测到Distil检查点(在此stackoverflow文章中进行了很好的描述),您需要确保您的浏览器在其窗口或文档原型中不包含任何变量,这些变量显示您正在使用Webdriver,就像您提到的那个一样。
您可以将软件用作Selenium以及ChromeDriver和Chrome,只要您采取一些预防措施并对二进制文件进行一些修复即可。此方法仅适用于头戴式版本,如果您希望使用无头版本,则需要进行其他测量才能通过窗口/渲染测试,如此处所述。
1. 修复 Chrome 二进制文件,或使用旧版本
首先,让我们处理设置为 True 的设置。这是由W3C协议定义的,作为浏览器的“NavigatorAutomationInformation”的一部分,它扩展了Navigator界面。如何删除它?该项目有很多文件,第三方的东西,眨眼的Web运行时等。因此,与其疯狂地试图弄清楚这是如何工作的,因为Chromium是开源的,不如聪明地在谷歌上搜索包含它的提交。这是链接。请注意以下文件:navigator.webdriver
-
third_party/WebKit/Source/core/frame/Navigator.h
,其中包含代码行:
`bool webdriver() const { return true; }`
This method is supossed to always return true, as you can see.
-
third_party/WebKit/Source/core/frame/Navigator.idl
,其中包含 Navigators 的扩展,包括我们的
`Navigator implements NavigatorAutomationInformation;`
which is being commited. Interesting, isn't it?
-
third_party/WebKit/Source/core/frame/NavigatorAutomationInformation.idl
包含扩展本身,以及一个只读变量,即:webdriver
`[
NoInterfaceObject, // Always used on target of 'implements'
Exposed=(Window),
RuntimeEnabled=AutomationControlled
] interface NavigatorAutomationInformation {
readonly attribute boolean webdriver;
};`
要摆脱此功能,注释使用此功能扩展的行并编译源代码(在此处在linux中编译)就足够了。但是,对于几乎任何计算机来说,这都是一项艰巨的任务,可能需要几个小时。如果您查看提交日期,则为2017年10月,因此可以选择下载该日期之前发布的任何版本的Chrome。要搜索镜像,您可以谷歌搜索.Navigator.idl
Navigator
inurl:/deb/pool/main/g/google-chrome-stable/
2. 修复 ChromeDriver
Distil 会根据窗口变量检查正则表达式规则 '/\$[a-z]dc_/',ChromeDriver 会添加一个满足该条件的正则表达式规则。如这里所述。正如他们所提到的,您必须在源代码中进行编辑,并重新定义变量 。与其他东西。此外,可能更容易的是,您可以使用十六进制编辑器来更新现有的二进制文件。call_function.js
var key = '$cdc_asdjflasutopfhvcZLmcfl_';
如果您决定使用旧版本的Chrome(我猜您确实这样做了),则需要使用适当版本的ChromeDriver。您可以在ChromeDriver下载网页中知道哪一个适合您的Chrome版本。例如,对于 Chrome v61(符合您的需求),您可以使用 ChromeDriver 2.34。完成后,只需将ChromeDriver二进制文件放在“/usr/bin/local”上即可。
3. 采取其他预防措施
- 注意你的用户代理。
- 不要执行太多重复的请求。
- 在请求之间使用(随机)延迟。
- 使用此处使用的 Chrome 参数来模拟普通用户配置文件。