如何解析 php 中的 phantom.js 输出?
How can I parse phantom.js output in php?
我可以从命令行获得 phantom.js 请求的输出,输出是我所期望的。我想从 php 脚本调用 phantom.js,然后解析输出以查找特定内容。
我的 phantom.js 看起来像:
var page = require('webpage').create();
console.log('The default user agent is ' + page.settings.userAgent);
page.settings.userAgent = 'SpecialAgent';
page.open('https://www.aa.com/travelInformation/flights/status/detail?search=AA|1698|2019,1,23&ref=search', function(status) {
if (status !== 'success') {
console.log('Unable to access network');
} else {
var ua = page.evaluate(function() {
return document.getElementById('aa-content-frame').innerHTML;
});
console.log(ua);
}
phantom.exit();
});
如果我 运行 从命令行执行以下操作:
phantomjs phantomjstest.js
我得到类似于以下的输出:
The default user agent is Mozilla/5.0 (Unknown; Linux x86_64) AppleWebKit/538.1 (KHTML, like Gecko) PhantomJS/2.1.1 Safari/538.1
<app-root-flight-status data="{"queryString":"AA|1698|2019,01,23",
"bffUri":"https://www.aa.com/flightinfo/v1.0/",
"email":"",
"countryCode":"",
"phoneNumber":""}" _nghost-c0="" ng-version="6.1.4"><router-outlet _ngcontent-c0=""></router-outlet><app-flight-details _nghost-c1=""><!----><!----><div _ngcontent-c1=""><!----><h1 _ngcontent-c1=""> Flight status</h1>
... blah blah blah ...
我想做的是 运行 phantom.js 来自 php 脚本,如下所示:
$response = exec('/usr/bin/phantomjs phantomjstest.js');
然后使用解析输出的代码继续 php 脚本。
当我执行 php 脚本时:
<?php
$response = exec('/usr/bin/phantomjs phantomjstest.js');
$query = mysqli_query($link, "INSERT INTO test (t_test) VALUES('11 - " . $response . "')");
echo "Response = <br /><br />".$response;
?>
$response 似乎是空的。它不会显示在屏幕上,并且只会将“11 -”添加到数据库中。我认为这是因为 phantomjstest.js 将 'ua' 记录到控制台。
我的问题是如何使 javascript 变量 ua 达到我可以在我的 php 脚本中解析它的程度。有什么想法吗?
PHP 的 exec 没有 return 输出。
它用命令的输出填充第二个参数,例如:
<?php
$response = [];
exec('/usr/bin/phantomjs phantomjstest.js', $response);
var_dump($response);
我可以从命令行获得 phantom.js 请求的输出,输出是我所期望的。我想从 php 脚本调用 phantom.js,然后解析输出以查找特定内容。
我的 phantom.js 看起来像:
var page = require('webpage').create();
console.log('The default user agent is ' + page.settings.userAgent);
page.settings.userAgent = 'SpecialAgent';
page.open('https://www.aa.com/travelInformation/flights/status/detail?search=AA|1698|2019,1,23&ref=search', function(status) {
if (status !== 'success') {
console.log('Unable to access network');
} else {
var ua = page.evaluate(function() {
return document.getElementById('aa-content-frame').innerHTML;
});
console.log(ua);
}
phantom.exit();
});
如果我 运行 从命令行执行以下操作:
phantomjs phantomjstest.js
我得到类似于以下的输出:
The default user agent is Mozilla/5.0 (Unknown; Linux x86_64) AppleWebKit/538.1 (KHTML, like Gecko) PhantomJS/2.1.1 Safari/538.1
<app-root-flight-status data="{"queryString":"AA|1698|2019,01,23",
"bffUri":"https://www.aa.com/flightinfo/v1.0/",
"email":"",
"countryCode":"",
"phoneNumber":""}" _nghost-c0="" ng-version="6.1.4"><router-outlet _ngcontent-c0=""></router-outlet><app-flight-details _nghost-c1=""><!----><!----><div _ngcontent-c1=""><!----><h1 _ngcontent-c1=""> Flight status</h1>
... blah blah blah ...
我想做的是 运行 phantom.js 来自 php 脚本,如下所示:
$response = exec('/usr/bin/phantomjs phantomjstest.js');
然后使用解析输出的代码继续 php 脚本。
当我执行 php 脚本时:
<?php
$response = exec('/usr/bin/phantomjs phantomjstest.js');
$query = mysqli_query($link, "INSERT INTO test (t_test) VALUES('11 - " . $response . "')");
echo "Response = <br /><br />".$response;
?>
$response 似乎是空的。它不会显示在屏幕上,并且只会将“11 -”添加到数据库中。我认为这是因为 phantomjstest.js 将 'ua' 记录到控制台。
我的问题是如何使 javascript 变量 ua 达到我可以在我的 php 脚本中解析它的程度。有什么想法吗?
PHP 的 exec 没有 return 输出。
它用命令的输出填充第二个参数,例如:
<?php
$response = [];
exec('/usr/bin/phantomjs phantomjstest.js', $response);
var_dump($response);