【发布时间】:2017-12-21 06:39:28
【问题描述】:
我正在使用 file_get_html 来抓取网站,但如果我提出了很多请求,我会被“禁止”,如果我想重新获得访问权限,我需要点击一些反机器人程序,它会解锁该网站但只是对于我执行此操作的浏览器/PC。我的问题是有什么方法可以解锁 php 浏览器(也许从另一个浏览器复制 cookie?)而无需重新启动路由器(以获取另一个 IP 地址)。
【问题讨论】:
我正在使用 file_get_html 来抓取网站,但如果我提出了很多请求,我会被“禁止”,如果我想重新获得访问权限,我需要点击一些反机器人程序,它会解锁该网站但只是对于我执行此操作的浏览器/PC。我的问题是有什么方法可以解锁 php 浏览器(也许从另一个浏览器复制 cookie?)而无需重新启动路由器(以获取另一个 IP 地址)。
【问题讨论】:
我确实有一个我之前研究过的解决方案。 虽然它不是 100% 合法的。但是您所做的操作也不是很合法....所以我认为它可能没问题。
还有他们基于 IP 阻止你的反机器人,清除 cookie 并没有绕过任何东西。即使您清除了 cookie,您仍然会得到验证码页面。
首先你知道反机器人网站提供 google-recaptcha 对吗?
所以你可以制作一个 javascript 来检测 google-recaptcha div(我的情况是我使用 jQuery),如果检测到 gcaptcha div 然后使用第三方验证码解决 API。在我的情况下,我使用2captcha --> 使用您自己的代理向他们发送验证码 id(对于 gcaptcha,代理是必要的,您可以使用 squid 代理服务器托管代理)--> 然后他们向您发送 g-response -- > 您将 g-response 发布回网站 --> 取消阻止
价格非常非常非常便宜,对我来说是负担得起的,所以我认为这是一个很好的解决方案。
由于限制,我无法向您发布我的脚本,但是您可以在他们的网站上找到一些示例。
您的问题: 所以基本上据我所知,我可以得到那个验证码(发送到 我自己)并解决它(比如 2captcha.com 的人)然后抓取脚本 将再次工作。我认为这只是基本的php和html,如果 你有任何提示我很高兴听到。谢谢!
为此,我建议您使用浏览器的内置开发工具打开任何具有recaptcha 的登录页面,在编写任何代码之前先检查一下。我个人使用 Opera 浏览器....
g-recaptcha-response=A_LONG_STRING_HERE_blablablabla。所以每当
出现一个recaptcha,发布g-recaptcha-response 将通过
验证。现在对您的代码提出一些建议。
对于 php 服务器端:
使用file_get_html后,在recaptcha中检测到一些<div>,比如<div class="rc-anchor-content">。如果检测到验证码,停止任何抓取并等待答案,显示一个带有输入参数的页面,您将输入g-recaptcha-response和一个提交按钮。
注意:如果您尝试复制<div class="g-recaptcha"> 的所有元素并将其显示在您的网站上,您可能会收到“site-key”错误错误,因为验证码本身也会检测它是从哪里显示的(url) .但是,如果您使用一些 javascript,您可能能够欺骗它?(或者您可以尝试没有 javascript 版本的 recaptcha?禁用 javascript,您会看到一个,不确定它是如何工作的)2captcha.com 可能已经这样做了,因为我之前在他们的工作人员页面上看到过验证码,您可以去注册一个工作人员帐户并检查他们的工作人员页面。
您需要在桌面上执行的操作:
用普通浏览器打开目标网站(必须与php浏览器相同的ip,可以使用代理),点击复选框然后从google复制json响应。将此字符串提交到您的 php 服务器,记住一个 g-response 会话仅在 3-5 分钟内有效,它将过期。
回到php浏览器:
php服务器收到你的g-recaptcha-response srting,将其发布到目标网站(不要忘记其他帖子值(如果存在)),取消阻止
【讨论】:
Can I somehow use php browser to manually clear that captcha ? 请记住验证码是一种反机器人解决方案,它旨在防止您从非凡的浏览器中抓取任何数据。是的,确实有一些库可以让你用代码解决验证码,但这取决于验证码的类型。传统的验证码是用英文词汇制作的图片(由GD库提供支持),大部分都可以通过github上的很多开源库读取,例如this library