如何使用php-phantomjs在无头chrome中执行Javascript?

时间:2017-08-01 20:29:29

标签: javascript php phantomjs php-phantomjs

我试图运行无头浏览器并在其中运行JS脚本(机器人),但想要使用php运行它。在Google上搜索,我发现PhantomJS的实现/包装为php-phantomjs。请耐心等待,我对这些东西很新。

这里我要做的就是截取警报窗口的截图(这不是必需的,只是为了测试JS是否被执行然后截取屏幕截图。)

这是我的代码:

// file: app.php

$client = PhantomJsClient::getInstance();
$client->isLazy();

$location = APP_PATH . '/partials/';

$serviceContainer = ServiceContainer::getInstance();
$procedureLoader = $serviceContainer->get('procedure_loader_factory')->createProcedureLoader($location);

$client->getProcedureLoader()->addLoader($procedureLoader);

$request  = $client->getMessageFactory()->createCaptureRequest();
$response = $client->getMessageFactory()->createResponse();

$request->setViewportSize(1366, 768);
$request->setHeaders([
    'User-Agent' => 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36'
]);

$request->setTimeout(5000);
$request->setUrl('https://www.google.co.in');

$request->setOutputFile(APP_PATH . '/screen.jpg');

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

尝试了以下列表中给出的两个自定义脚本:http://jonnnnyw.github.io/php-phantomjs/4.0/4-custom-scripts/

// file: page_on_resource_received.partial, page_open.partial

alert("Hello");

OUTPUT:它只显示页面,而不是警告窗口。

我再说一遍,它不是为了截屏,而是为了确保JS正在执行。 我只想执行我的JS脚本(更好的说机器人),如:

var form = document.getElementById('form');
var event = new Event('submit');
form.dispatchEvent(event);

或者可能使用jQuery,然后将该页面的输出作为响应返回给php。所以,如果在无头浏览器中使用php运行机器人还有其他方法,请在答案或评论中提及。

1 个答案:

答案 0 :(得分:0)

PhantomJS是无头的,就是它没有GUI。因此,无法看到窗口对话框。

尝试将自定义文字写入元素而不是警告,例如

document.getElementById("#title").innerHTML = "It works!";
相关问题