我一直在用Chromedriver测试Selenium,我注意到有些页面可以检测到你在使用Selenium,尽管根本没有自动化功能。即使我只是手动浏览,只是使用Chrome,通过Selenium和Xephyr,我也经常会看到一个页面,上面说检测到了可疑的activity。我已经检查了我的用户代理和我的浏览器指纹,他们都完全相同的正常Chrome浏览器。
当我用普通的Chrome浏览这些网站时,一切都很正常,但当我使用硒时,我就被检测到了。
理论上,chromedriver和Chrome在任何Web服务器上看起来都应该是完全一样的,但不知何故它们可以检测到它。
如果您想要一些测试代码,请试用以下代码:
from pyvirtualdisplay import Display
from selenium import webdriver
display = Display(visible=1, size=(1600, 902))
display.start()
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--disable-extensions')
chrome_options.add_argument('--profile-directory=Default')
chrome_options.add_argument("--incognito")
chrome_options.add_argument("--disable-plugins-discovery");
chrome_options.add_argument("--start-maximized")
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.delete_all_cookies()
driver.set_window_size(800,800)
driver.set_window_position(0,0)
print 'arguments done'
driver.get('http://stubhub.com')
如果您浏览stubhub,您将在一两个请求中被重定向和“阻塞”。我一直在调查这件事,我不知道他们是怎么知道一个用户在使用硒的。
他们是怎么做的?
我在Firefox中安装了Selenium IDE插件,但当我在普通的Firefox浏览器中访问stubhub.com时,却被禁止了。
当我使用Fiddler查看来回发送的HTTP请求时,我注意到“假浏览器的”请求通常在响应头中有“no-cache”。
这样的结果表明,当您使用Webdriver时,不应该有任何方法来检测我是否在JavaScript的Selenium Webdriver页面中。但这一证据表明情况并非如此。
网站上传了一个指纹到他们的服务器,但我检查了一下,Selenium的指纹和使用Chrome时的指纹是一样的。
这是它们发送到服务器的指纹负载之一:{“AppName”:“Netscape”,“Platform”:“Linuxx86_64”,“Cookies”:1,“syslang”:“en-US”,“userlang”:“en-US”,“CPU”:“”,“ProductSub”:“20030107”,“SetTimeout”:1,“SetInterval”:1,“Plugins”:{“0”:“ChromePDFViewer”,“1”:“ShockWaveFlash”,“2”:“WidevineContentDecryptionModule”,“3”:“NativeClient”,“4ER“}}
硒和铬是一样的。
VPN只工作一次,但在我加载第一个页面后就会被检测到。显然,正在运行一些JavaScript来检测Selenium。
您可以使用VIM
或Perl
替换ChromeDriver
中的CDC_
字符串。请参阅@erti-Chris Eelmaa的答案以了解更多关于该字符串以及它是如何作为检测点的。
使用Vim
或Perl
可以避免重新编译源代码或使用十六进制编辑器。
在尝试编辑ChromeDriver
之前,请确保制作原始ChromeDriver
的副本。
我们的目标是更改cdc_
字符串,该字符串看起来类似于$cdc_lasutopfhvczlmcfl
。
在ChromeDriver版本2.41.578706
上测试了以下方法。
vim /path/to/chromedriver
在运行上面的行之后,您可能会看到一堆胡言乱语。执行以下操作:
:%s/cdc_/dog_/g
将cdc_
的所有实例替换为dog_
。
dog_
只是一个例子。您可以选择任何内容,只要它具有与搜索字符串相同的字符量(例如,CDC_
),否则ChromeDriver
将失败。:q!
并按Return
。下面一行用dog_
替换所有cdc_
出现的情况。Vic Seedoubleyew功劳:
perl -pi -e 's/cdc_/dog_/g' /path/to/chromedriver
确保替换字符串(例如DOG_
)具有与搜索字符串(例如CDC_
)相同的字符数,否则ChromeDriver
将失败。
验证是否替换了所有出现的CDC_
:
grep "cdc_" /path/to/chromedriver
如果没有返回输出,则替换成功。
转到修改后的ChromeDriver
并双击它。终端窗口应该打开。如果在输出中没有看到killed
,则说明您已经成功地更改了驱动程序。
请确保更改后的ChromeDriver
二进制文件的名称为ChromeDriver
,并且将原始二进制文件从其原始位置移动或重命名。
我以前在尝试登录时在网站上被检测到,但是在用一个相同大小的字符串替换cdc_
之后,我就能够登录了。就像其他人所说的那样,如果你已经被检测到了,即使在使用了这个方法之后,你也可能会因为很多其他原因而被阻止。因此,您可能必须尝试使用VPN、不同的网络等访问正在检测您的站点。
问题内容: 我一直在使用Chromedriver测试Selenium,但我注意到,即使根本没有自动化功能,某些页面也可以检测到您正在使用Selenium。即使当我只是通过Selenium和Xephyr使用chrome手动浏览时,我也经常得到一个页面,指出检测到可疑活动。我已经检查了用户代理和浏览器指纹,它们与普通的chrome浏览器完全相同。 当我以普通的chrome浏览到这些站点时,一切正常,但
问题内容: 我一直在使用Chromedriver测试Selenium,但我注意到,即使根本没有自动化功能,某些页面也可以检测到你正在使用Selenium。即使当我只是通过Selenium和Xephyr使用chrome手动浏览时,我也经常得到一个页面,指出检测到可疑活动。我已经检查了用户代理和浏览器指纹,它们与普通的chrome浏览器完全相同。 当我以普通的chrome浏览到这些站点时,一切正常,但
问题内容: 我一直在使用Chromedriver测试Selenium,但我注意到,即使根本没有自动化功能,某些页面也可以检测到您正在使用Selenium。即使当我只是通过Selenium和Xephyr使用chrome手动浏览时,我也经常得到一个页面,指出检测到可疑活动。我已经检查了用户代理和浏览器指纹,它们与普通的chrome浏览器完全相同。 当我以普通的chrome浏览到这些站点时,一切正常,但
请原谅打断我们...当你浏览www.controller.com时,你的浏览器让我们以为你是个机器人。有几个原因可能会发生这种情况:你是一个超级用户,以超人的速度浏览这个网站。您已经在web浏览器中禁用了JavaScript。第三方浏览器插件,如Ghostery或NoScript,正在阻止JavaScript的运行。其他信息可在本支持文章中获得。若要申请解除封锁,请填写以下表格,我们将尽快审查。“
我希望我的程序打开默认的chrome配置文件,然后获得YouTube。我可以让它打开youtube(在新的chrome浏览器中),或者打开默认的chrome配置文件,但不能两者兼而有之。(不,我没有运行两个驱动变量) 当我运行获取chrome配置文件的驱动程序行时,我会得到错误: 回溯(最近的调用为last):文件“C:\users\myname\onedrive\documents\python