【问题标题】:perform clicks and logout of website using cURL and php使用 cURL 和 php 执行网站的点击和注销
【发布时间】:2016-05-17 11:19:16
【问题描述】:

我使用 cURL 登录网站。自然的问题是如何单击按钮而不是最终注销。例如..javascript 使用 click() 函数。 php有什么用?感谢提供线索。

我正在关注关于网络抓取的书。在其中,作者登录到它的出版商网站。这本书很旧而且过时了。更重要的是,它没有说明注销。这是发布者:https://www.packtpub.com/

【问题讨论】:

  • 您也许可以分析单击链接时应该做什么,但是 PHP 可能不是最适合此目的的语言。此外,您的问题非常广泛,很可能会被关闭(没有代码,太宽泛,有点离题)。
  • 哦哦……我进去了……但是这里很黑……我怎么出去?
  • 告诉我更多关于如何“分析点击链接”的信息。
  • 您无法单击链接...您可以解析该 dom 并找到链接并关注它们,但这不是一个简单的答案,甚至可能不是其他站点管理注销的方式。您的问题太宽泛,无法回答
  • 我明白了。我添加了更多信息来缩小我的问题范围。

标签: php curl logout


【解决方案1】:

你不能click 一个按钮单独使用 PHP。 PHP 不能那样工作。 PHP 可以下载网页的 HTML,但不能像浏览器那样执行操作。

如果您想这样做,您将需要一个无头浏览器。无头浏览器通常被视为不可见的浏览器。您可以做普通浏览器可以做的大部分事情。有PhantomJSCasperJS,为此。

还有使用 PhantomJS 的 PHP 库。例如PHP PhantomJS。就个人而言,我从来没有用 PHP 做过这件事,但我确实经常使用 PhantomJS 和 CasperJS。

除此之外,您可以使用 PHP 来解析 DOM 中的链接或按钮,并复制单击链接/按钮时发出的 HTTP 请求。

例如,如果有一个指向/contactus 的链接,您只需使用 cURL 创建一个到此页面的 GET 请求。响应将是源代码和/或标头。

我目前正在开发一个项目,该项目使用 CasperJS、PHP 和 Redis 来为大型社交网络创建一个相当复杂的爬虫/自动化/分析工具。

附带说明,一些网站严重依赖 JavaScript,使用 cURL 可能还不够。你可以通过解析 JavaScript 文件和其他一些高级魔法来解决这个问题,但相信我,你不想走这条路。这就是我偶尔使用 CasperJS 的原因。它的速度较慢,但​​目前仅此而已。

至于注销...删除您的cookies文件。完成。

【讨论】:

    【解决方案2】:

    我最近发布了一个让 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();
    

    【讨论】:

      猜你喜欢
      • 2018-09-10
      • 2012-09-09
      • 2015-12-19
      • 1970-01-01
      • 1970-01-01
      • 2011-01-28
      • 1970-01-01
      • 2014-03-21
      相关资源
      最近更新 更多