前言:我的目标不是使用自动化工具来解决验证码,而是试图理解为什么首先将由硒启动的浏览器识别为机器人,以及硒对此的贡献。 br />
我每天使用硒启动Firefox并登录到网站上以抓取一些数据。 Google的reCAPTCHA,每次我尝试单击复选框时,Google都会确定我是机器人,并要求我选择一堆图像。
我启动了一个常规的firefox实例(即没有硒),去了网站,单击了复选框,它确定我是人类并且放手了。
然后我很好奇,我通过可执行文件启动Firefox和通过Selenium启动Firefox之间有什么区别。我决定使用这段Java代码启动firefox。
当然,这意味着很多东西在幕后进行,但也许firefox的硒实例还不够“人性化”?
,所以我尝试了几种不同的方法来尝试看起来更人性化:
也许我只需要浏览。像人类一样。
有许多理论讨论诸如鼠标移动,键盘击打等问题。因此,浏览器启动,我输入URL,单击其他一些链接,我来返回登录页面,输入用户名+密码,然后继续单击验证码...,我是机器人。
也许我没有任何Cookie或浏览历史记录?
Selenium默认情况下会创建一个新的配置文件,因此它没有cookie或浏览历史记录。我可以指定要使用的自定义配置文件,因此只需传入存储在
APPDATA/roaming/mozilla/profiles
中的自己的firefox配置文件即可。我验证了所有保存了我的凭据的网站都在使用硒启动的浏览器中,但是当我遇到reCAPTCHA时,它确定我是一个机器人并要求选择图片也许我需要使用缓存?
默认情况下,Selenium使用自定义的缓存路径,该路径在会话结束后会被清除。在firefox中,您可以转到
about:cache
看到此内容,它会显示类似anonymous6337741624277931373webdriver-profile\cache2
的内容,而且那里没有太多内容。 > WebDriver driver = new FirefoxDriver(new FirefoxProfile());
,并验证了我所有的缓存资源是否存在。
但没什么区别。
也许我只需要现在要解决一次验证码吗?
现在我在想,好吧,所以,如果Google认为我是机器人,那么我如何一次在硒启动的浏览器中解决验证码,让他们知道我'很好,然后不会再次发生?也许它会将浏览器标识为新客户端,并且只需要知道该新客户端不是机器人即可。
所以我解决了验证码并成功登录。然后我注销,返回到登录页面,输入我的凭据,按下reCAPTCHA框...。它要求我再次解决图像选择问题!
此时,我在想,我已经成功解决了一半的验证码在一分钟前,它展示了许多人工操作,但我仍然被认为是机器人。
硒中有什么特别的东西使Google自动将我识别为机器人吗?
我使用了具有自定义缓存路径的自定义配置文件。我用饼干。我已经在个人资料中安装了所有常规扩展程序。我的用户代理没有被欺骗,它与我正常的浏览体验没有什么不同。请求标头中没有任何内容表明它与常规浏览器没有什么不同。
我可以得出结论,当我使用selenium时,硒的一端会导致我被识别为机器人。 m使用浏览器作为常规用户。
也许有特定的JS对象被注入到Google挑选的DOM中?
#1 楼
根据定义,解决验证码不能自动进行:否则,它不能使计算机和人类分开,因此不能成为验证码。如何在测试环境中处理验证码:
使用http://www.deathbycaptcha.com之类的服务,该服务具有API为您返回验证码的文本。他们说,平均响应时间为15秒,结果率为90%左右。听起来像是要尝试的事情。
Google正式禁止使用google oauth对任何平台进行自动集成测试。但是,如果您将gsuite域用于测试帐户,则可以运行自己的身份提供程序来处理auth
,请您的开发团队删除测试环境上的CAPTCHA字段。
请您开发团队制作一个类似于CAPTCHA的沙箱,该沙箱每次都会接受一个输入文本。
如果您使用的是自定义CAPTCHA模块,则可以要求开发人员为测试环境生成一个CAPTCHA生成的API。
您可以要求开发团队在标记中添加CAPTCHA代码作为标题,然后您可以访问此标题并绕过CAPTCHA,但只能在测试环境中进行。
通常,如果他们已将CAPTCHA添加到其网站中,他们可能已经注意到垃圾邮件尝试登录,并且希望减轻这种情况。与网站管理员联系,并向他们提及您的所作所为,并询问他们是否会为您提供某些东西,以便您可以继续进行自己的工作。
评论
感谢您的回复。我正在使用的服务器是第三方。我维护了这些自动化工具,以避免始终需要手动检查网站(有几十个网站)。我感兴趣的是,是否有人能够使硒驱动的浏览器实例看起来像Google的验证码服务的真实浏览器。毕竟,它使用了一个真正的浏览器,我可以完全控制自己。在这一点上,我能告诉的唯一区别是我是手动启动它还是通过硒启动它。 Google确实有一个无验证码的验证码,不需要我解决。
– MxLDevs
18年4月18日在18:44
@MxyL试图使您的机器人看起来像不是在与Google对抗。他们拥有先进的算法来尝试检测这些东西,并且不会告诉您如何检测机器人。您可以尝试,但是除非您有很多资源可以节省,否则我认为这会浪费时间和金钱。
–内森·美林(Nathan Merrill)
'18 Apr 19在3:13
值得一提的是,诸如DeathByCaptcha之类的服务是通过将验证码外包给人类来工作的-他们没有做任何聪明/技术性的事情来自动解决它们。是否担心是另一回事,但是值得了解它们如何工作。
– Bilkokuya
18年4月19日在9:25
+1,尽管我会稍微挑战一点:“按照定义,解决CAPTCHA不能自动进行”。设计目标是它不能自动化。但是,不是automatable(?)并不符合定义。
– TripeHound
18年4月19日在13:07
#2 楼
如果您使用的是reCAPTCHA v2,则可以使用测试键绕过它。使用这些测试密钥,您将始终不获得任何验证码,并且所有验证请求都将通过。
Site key: 6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI
Secret key: 6LeIxAcTAAAAAGG-vFI1TnRWxMZNFuojJ4WifJWe
reCAPTCHA小部件将显示警告。消息以确保不将其用于生产流量。
来源:Google Developer FAQ。
当然,这不是生产站点上所需的。但是,对于那些努力绕过Google reCAPTCHA进行自动化测试的人来说,这是理想的选择。
评论
但是,这不适用于上述情况,是吗?在OP中,他们描述了自己尚未实施reCAPTCHA而是在第三方网站上的情况。
–vanamerongen
18-10-16在15:50
#3 楼
CAPTCHA已添加到网站,以防止像您这样的程序使用该网站。是设计使您不能绕过它的(除非网站开发人员提供绕过它的方法)。如您所知,设计工作正常。
您可以执行以下一项操作:
使用一项服务(人员)将为您解决CAPTCHA(对于费用,并且似乎有些服务是免费的)
通过提供用户想要的东西自己构建这样的服务,因此他们将很乐意为您解决那些验证码
编写测试步骤以解决验证码并继续。我是通过放入Python调试器,单击适当的并继续测试来实现的。
评论
次要错字:“按设计”->“按设计”
– Andrew T.
18年4月19日在8:08
在线发布一些非常理想的内容,并用您需要解决的验证码的副本进行保护...,并记录并重复使用访客给您的解决方案...。
–rackandboneman
18年4月19日在15:05
@rackandboneman-IIUC,这正是我的第二种选择,您对它的解释不同吗?
– Peter M.-代表莫妮卡(Monica)
18年4月19日在15:45
#4 楼
Webdriver规范定义了一个navigator.webdriver
属性,以指示UA是否由自动化控制。定义此属性并在运行带有true
标志的Chrome时返回--headless
。请注意以下内容:
https://www.chromestatus.com/feature/6216034532982784
#5 楼
正如@John Doe所提到的,这可能是由于Selenium驱动的浏览器中默认的navigator.webdriver
DOM属性是true
。在Firefox中,您可以将dom.webdriver.enabled
配置变量设置为false
(转到about:config
更改变量),这将禁用此属性。就我而言,这停止了reCAPTCHA触发。#6 楼
您确实应该设置一个禁用验证码的正确测试环境。您可以在当前的测试环境中禁用它,或者为Selenium专门设置一个新的环境。与设计一种在当今可能行得通,但随着非法服务也开始使用它而在未来争夺的解决方案相比,它将在将来为您节省很多钱和痛苦。
#7 楼
尽管许多人都试图给出有关可以触发验证码的想法,但我还是会添加自己的经验使用或不使用代理的IP地址
浏览会话(机器人具有可预测的短暂浏览会话)
其他选项卡中的活动
您是否正在下载所有样式/图像文件
当前登录的Google帐户
以前使用google的搜索历史
鼠标在Recaptcha图像框中的移动。
如其他答案所建议,在这种情况下最好的做法是将验证码提供给测试人员,并手动解决该问题,然后使用无头浏览器重现相同的行为。
#8 楼
通过硒Web驱动程序打开chrome或Firefox实例时,将添加参数。其中一些可以删除,例如,我设置了一些实验选项,现在,如果我手动单击chrome上的验证码复选框,即使我使用硒启动实例,也不会获得图像。
但是,如果我让Web驱动程序单击该复选框,则会得到褪色图像(reCAPTCHA的最高级别)。
评论
如果您要编辑答案以说明您使用了哪些实验选项以及这些选项是否会延续到Selenium配置文件中,则您的答案会更有用。
–凯特·保罗(Kate Paulk)
19-10-21在11:37
评论
找到了一篇讨论Recaptcha系统的外部分析的论文:blackhat.com/docs/asia-16/materials/…如果要进行完整的集成测试,还必须解决验证码,以确保其没有损坏。
您是否有权访问开发人员/网站源进行更改以允许您绕过验证码?
“最近该网站通过添加Google的reCAPTCHA更改了他们的登录系统”仅登录页面?如果是,是什么导致您无法手动登录一次,然后存储auth cookie以供以后使用?该网站是否要求您在每次启动浏览器时登录?
因此,您使用的是漫游器,想知道为什么Google会检测到它吗?我的猜测是Google会竭尽所能,以确保您找到的任何解决方法都将得到解决...