我有一个通过exec命令调用phantomjs的php文件。 phantom.js文件调用需要包含变量的URL。我需要从php中将这些变量与exec命令一起发送,并在phantom.js网址中显示这些变量。
这是我当前的硬编码php:
$response = [];
exec('/usr/bin/phantomjs phantomjstest.js', $response);
$data = $response[19];
和phantom.js
var page = require('webpage').create();
console.log('The default user agent is ' + page.settings.userAgent);
page.settings.userAgent = 'SpecialAgent111';
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();
});
我想做的是更改php,以便它将2个变量(从表单提交)传递给javascript。像这样:
PHP:
exec('/usr/bin/phantomjs phantomjstest.js?variable1=$forminput1&variable2=$forminput2', $response);
JS
page.open('https://www.aa.com/travelInformation/flights/status/detail?search=AA|variable1|variable2&ref=search', function(status) {
或者我可以在php中构造整个URL,并将其与exec命令一起发送。
对于任何一种方法或从此处到达那里的其他方法的任何想法,都将受到赞赏。谢谢。
根据评论中的建议,我已更新PHP以使其包含:
exec("/usr/bin/phantomjs phantomjstest.js https://www.aa.com/travelInformation/flights/status/detail?search=AA|1698|2019,1,23&ref=search", $response);
和我的JS:
var page = require('webpage').create();
console.log('The default user agent is ' + page.settings.userAgent);
page.settings.userAgent = 'SpecialAgent111';
var system = require('system');
var args = require('system').args;
var address = system.args[0];
page.open(address, 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();
});
但是我得到的只是一个空响应。知道为什么地址没有通过PHP exec传递或没有被JS拾取和运行吗?
谢谢。
******解决方案********
有几件事需要修复,我要感谢下面评论的内容,以及关于SO的解决类似问题的其他方法。
首先,JS不喜欢URL中的&符号。我必须在传递的参数中使用@,然后在JS端将其替换。
第二,JS不喜欢URL中的管道符号,因此我不得不对其进行转义。
完成的PHP如下:
exec("/usr/bin/phantomjs phantomjstest.js https://www.aa.com/travelInformation/flights/status/detail?search=AA\|$flight\|$date@ref=search", $response);
和类似JS的
var page = require('webpage').create();
console.log('The default user agent is ' + page.settings.userAgent);
page.settings.userAgent = 'SpecialAgent111';
var system = require('system');
var args = require('system').args;
var address = system.args[1];
var address = address.replace(/@/gi,"&");
page.open(address, 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();
});
再次,谢谢大家!!!
答案 0 :(得分:0)
******解决方案********
有几件事需要修复,我要感谢下面评论的内容,以及关于SO的解决类似问题的其他方法。
首先,JS不喜欢URL中的&符号。我必须在传递的参数中使用@,然后在JS端将其替换。
第二,JS不喜欢URL中的管道符号,因此我不得不对其进行转义。
完成的PHP如下:
exec("/usr/bin/phantomjs phantomjstest.js
https://www.aa.com/travelInformation/flights/status/detail?
search=AA\|$flight\|$date@ref=search", $response);
和类似JS的
var page = require('webpage').create();
console.log('The default user agent is ' + page.settings.userAgent);
page.settings.userAgent = 'SpecialAgent111';
var system = require('system');
var args = require('system').args;
var address = system.args[1];
var address = address.replace(/@/gi,"&");
page.open(address, 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();
});