如何使用phantomJS php或MTS运行javascript函数

时间:2017-10-31 18:07:03

标签: php phantomjs

的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个小时来学习phantomJSMTS,但我暂时陷入困境。 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获取文本使用两个库?

1 个答案:

答案 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}}它会给出当前页面的截图,它就像一个调试器,看看到底发生了什么。