2

设想 :

我有一个目标网站,我需要抓取并截取个人帐户提要的屏幕截图。

需求:

  1. 登录网站。
  2. 浏览到个人区域。
  3. 抓取页面。

代码 :

require 'vendor/autoload.php';

use JonnyW\PhantomJs\Client;

    $client = Client::getInstance();
    $client->getEngine()->setPath('C:\xampp\htdocs\phantomjs\bin\phantomjs.exe');
    $client->getProcedureCompiler()->clearCache();
    $client->isLazy();
    $delay = 15; // 5 seconds
    $width  = 1366;
    $height = 768;
    $top    = 0;
    $left   = 0;


    $request  = $client->getMessageFactory()->createCaptureRequest();
    $response = $client->getMessageFactory()->createResponse();
    $request->setDelay($delay);
    $request->setTimeout(10000);


    $data = array(
    'login' => '***',
    'password' => '***',
    );

    $request->setMethod('POST');
    $request->setUrl('login-url');
    $request->setRequestData($data); // Set post data
    $request->setOutputFile('screenshot.jpg');
    $request->setViewportSize($width, $height);
    $request->setCaptureDimensions($width, $height, $top, $left);

    $client->send($request, $response); 

    $file = fopen("1.txt","a");
    fwrite($file,$response->getContent());
    fclose($file);

问题 :

如何在不丢失 cookie 和会话的情况下浏览到个人页面 URL?

我已经尝试仅在同一请求下再次更改 setUrl,但它不起作用。

    $request->setMethod('GET');
    $request->setUrl('personal-page-url');
    $request->setOutputFile('screenshot1.jpg');

    $client->send($request, $response);

    $file = fopen("2.txt","a");
    fwrite($file,$response->getContent());
    fclose($file);
4

1 回答 1

1

根据github上的this issue ,cookies还有一个未修复的问题。你可以关注它。

Cookie 和 php-phantomjs #124 Open lucl22 于 2016 年 10 月 1 日打开此问题 · 3 条评论

或者,如果您的目标网页没有太多的 ajax 数据传输,您可以使用其他方式进行报废,例如:


如果你真的需要运行 js,你可以使用其他 web-drivers for php

于 2017-03-21T08:40:40.367 回答