我正在编写服务器cronjob以使用PHP语言从网站上抓取数据。 该页面需要登录,用户应使用Google reCaptcha或使用OAuth登录Facebook,Twitter或Google来登录网站。
我认为绕过Google reCaptcha登录非常困难,因此我尝试编写如下代码:
function loginSite()
{
global $config;
$data = openPageWithCurl($config['loginPage']); // Return the result of CURL with cookies / userAgent
$dom = new simple_html_dom();
$domData = $dom->load($data);
$nodes = $domData->find("a");
$twitterLogin = "";
foreach ($nodes as $node) {
$name = $node->href;
if(strpos($name,'twitter')){
$twitterLogin = $name;
}
}
...
// Setting the website login credential
// Login Twitter
// Redirect back to TargetWebsite
...
...
}
然后,我得到的结果是$twitterLoggin = "/sothing/twitter/?timestamp=******&&authorization=***........."
但是,curl无法访问Twitter登录页面($config['baseURL'].$twitterLogin
)。错误是找不到页面。
所以我试图检查这里出了什么问题。
首先,我发现一些客户端脚本(javascript)将在登录页面上运行,该页面是google recaptcha的初始设置,并向URL添加了一些参数。
这意味着该网址将从http://www.example.com/login
更改为http://www.example.com/login?someParameter={somthing encrypted}&&somethingelse={encrypted too}
。
我认为curl
无法访问的原因是Twitter登录URL,它将检查哪个页面重定向到登录页面。没有从实际登录页面发送的卷曲或缺少参数的登录页面网址。
这里有一些解决方案,但我不知道如何完成。
A)从客户端获取最终的URL /位置,并将其添加回curl函数。
B)使用其他方法来模拟客户端浏览器可以执行登录并返回html内容。可以是python
或node.js
或某些库可以做到这一点?
任何人都可以给我一些建议吗?