javascript - 如何使用 php-phantomjs 在 headless chrome 中执行 Javascript?

标签 javascript php phantomjs php-phantomjs

我正在尝试运行 headless 浏览器并在其中使用运行 JS 脚本(机器人),但想使用 php 运行它。在谷歌上搜索,我发现 PhantomJS 的实现/包装器是 php-phantomjs。请耐心等待,我对这些东西很陌生。

这里我想做的是对alert窗口进行截图(这个不是必须的,只是为了测试是否执行了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");

输出:它只显示页面,而不是警报窗口。

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

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

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

最佳答案

PhantomJS 是 headless 的,也就是说它没有 GUI。因此看不到窗口对话框。

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

document.getElementById("#title").innerHTML = "It works!";

关于javascript - 如何使用 php-phantomjs 在 headless chrome 中执行 Javascript?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45447150/

相关文章:

Selenium java + PhantomJS - phantomjs ://platform/console++. js:263 错误

php - 在 PHP 中的表单顶部显示消息

java - 如何创建类似blade.php的jsp模板?

php - 如何在 travis 中运行 composer.phar self 更新

php - Javascript 弹出选择器 + PHP

unit-testing - 有没有办法在 headless 浏览器中为 WebGL webapp 运行单元测试

memory-leaks - phantomjs 没有关闭并留下孤立进程

javascript - 如何使用云功能在Firebase中获取实时数据库?

javascript - 显示加载或任何覆盖时禁用 ag-grid

javascript - 生成唯一的随机数以在 Express EJS( Node )中执行随机图像