的index.php
<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
<script>
function showtext()
{
$.ajax({
url: 'process.php',
type: 'GET',
data: {name: $('input').val()},
success: function(d){
$('#show').text(d);
}
})
}
</script>
<input type="text" value="John">
<button id="clickme" onclick="showtext()">click me</button>
<div id="show"></div>
我们可以看到,有两种方法可以从div#show获取字符串:点击按钮或运行showtext()。
我花了3个小时来学习phantomJS和MTS,但我暂时陷入困境。 MTS总是抛出错误showtext() is not a valid function name
,而phantomJS根本没有运行(卡住)。我尝试在SO和google中找到的所有内容。但仍然一无所获。
这是我的phantomjs代码
var webPage = require('webpage');
var page = webPage.create();
page.onConsoleMessage = function(msg) {
console.log(msg);
}
page.open('http://creativecoder.xyz/test/', function(status) {
page.evaluate(function() {
showtext();
var a = document.getElementById("show").innerHTML;
console.log('xx: '+ a);
});
phantom.exit();
});
root@ga-ubuntu-512mb-sgp1-01:/var/www/html/test# phantomjs test.js
^C
root@ga-ubuntu-512mb-sgp1-01:/var/www/html/test# phantomjs test.js
^C
root@ga-ubuntu-512mb-sgp1-01:/var/www/html/test# phantomjs test.js
^C
root@ga-ubuntu-512mb-sgp1-01:/var/www/html/test# phantomjs test.js
我总是强行关闭这个过程因为永远不会停止并且什么也不返回。
这是另一个使用jquery的脚本
var page = require('webpage').create();
page.open('http://creativecoder.xyz/test/', function() {
page.includeJs("http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js", function() {
page.evaluate(function() {
var a = 'asdsad';
$("#clickme").click();
a = $('#show').html();
console.log(a); //overide a
});
phantom.exit()
});
});
但仍然一无所获。
如何运行showtext()/执行单击然后从div#show获取文本使用两个库?
答案 0 :(得分:0)
在调用page.onConsoleMessage
之前,你必须检查status参数,并且不要使用var page = require('webpage').create();
// I'm trying here to simulate a normal browser, you can remove this part of code if you want
page.settings.userAgent = 'Mozilla/5.0 (Unknown; Linux x86_64) AppleWebKit/538.1 (KHTML, like Gecko) Chrome/55.0.2883.75 Safari/538.1';
page.viewportSize = { width: 1600, height: 794 };
// open page
page.open('http://creativecoder.xyz/test/', function (status) {
// checking status
if (status !== 'success') {
console.log('cannot open page');
phantom.exit();
}
var result = page.evaluate(function() {
// click button
document.getElementById('clickme').click();
// get text result
var res = document.getElementById('show').innerText;
return res;
});
console.log(result);
phantom.exit();
});
它是出于调试目的,而是你必须告诉evaluate函数从页面返回你想要的任何内容然后使用它。看看我的例子:
page.render('img.png')
你也可以使用{{1}}它会给出当前页面的截图,它就像一个调试器,看看到底发生了什么。