我使用cURL登录网站。自然的问题是如何执行按钮点击而不是最终注销。例如..javascript使用click()函数。 php使用什么?谢谢你的线索。
我正在关注网络抓取的书。其中作者登录了它的发布者网站。这本书陈旧过时了。更重要的是,它没有提到退出。这是发布商:https://www.packtpub.com/
答案 0 :(得分:2)
您不能仅使用PHP来click
一个按钮。 PHP并没有这样的工作。 PHP可以下载网页的HTML,但它无法像浏览器那样执行操作。
如果你想这样做,你需要一个无头浏览器。无头浏览器通常被视为不可见的浏览器。您可以执行常规浏览器可以执行的大多数操作。为此,有PhantomJS和CasperJS。
还有使用PhantomJS的PHP库。例如PHP PhantomJS。就个人而言,我从来没有用PHP做过这个,但我确实定期使用PhantomJS和CasperJS。
替代方案,您可以使用PHP来解析链接或按钮的DOM,并复制单击链接/按钮时所做的HTTP请求。
例如,如果有/contactus
的链接,您只需使用cURL创建对此页面的GET请求。响应将是源代码和/或标题。
我目前正在开发一个项目,该项目使用CasperJS,PHP和Redis为大型社交网络创建一个相当复杂的刮刀/自动化/分析工具。
作为旁注,一些网站严重依赖JavaScript,使用cURL可能还不够。你可以通过解析JavaScript文件和其他一些高级魔法来解决这个问题,但请相信我你不想沿着这条路走下去。这就是我偶尔使用CasperJS的原因。它速度较慢,但这是我们目前得到的所有内容。
关于退出...删除您的cookie文件。完成。
答案 1 :(得分:1)
我最近发布了一个项目,可以让PHP访问浏览器。在这里获取:https://github.com/merlinthemagic/MTS,引人注目的是PhantomJS的一个实例,正如其他人所建议的那样,这个项目只是包含了这个功能。
下载并设置后,您只需使用以下代码:
$myUrl = "http://www.example.com";
$windowObj = \MTS\Factories::getDevices()->getLocalHost()->getBrowser('phantomjs')->getNewWindow($myUrl);
//select the username input field, in this case it has id=username
$windowObj->mouseEventOnElement("[id=username]", 'leftclick');
//type your username
$windowObj->sendKeyPresses("yourUsername");
//select the password input field, in this case it has id=passwd
$windowObj->mouseEventOnElement("[id=passwd]", 'leftclick');
//type your password
$windowObj->sendKeyPresses("yourPassword");
//click on the login button, in this case it has id=login
$windowObj->mouseEventOnElement("[id=login]", 'leftclick');
//click on all the buttons you need with this function
$windowObj->clickElement("[id=someButtonId]");
$windowObj->clickElement("[id=someOtherButtonId]");
//if you want the DOM or maybe screenshot and any point run:
$dom = $windowObj->getDom();
$imageData = $windowObj->screenshot();