如何在使用phantomjs的JS事件后获取更新的页面内容?

时间:2013-06-30 10:51:30

标签: javascript phantomjs

我有一个简单表单的页面。此表单有一个输入文本。

我有这段代码:

page.open("http://www.example.com", function (status) {    
    page.includeJs("http://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js", function() {
        page.evaluate(function() {
            $('input[name=myText]').val('my content');
        });     
    });     
});

(你可以看到我也加载了jquery)

现在,当我设置此输入文​​本的内容时,页面会发生变化,页面内容会发生变化。

我的问题是:如何获取更新的内容? 问题是我需要提交表格,但我不能在以下情况下提交:

$('input[name=myText]').val('my content');

因为当我设置它时,页面上有一个JS事件来改变内容。

所以我必须阅读新内容,使用JQuery查找表单然后提交。

有人可以帮助我吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

因此,您的page.evaluate()来电会产生副作用并会更改页面。问题是这种变化是否会立即发生。但你不能认为它确实存在 - 特别是如果它导致从远程网络服务器获取新内容。

在这种情况下,您可以尝试的最好的事情是睡一会儿,然后假设您的页面有新内容。或者,当您感觉更高级时,定期轮询您期望出现的DOM对象。但是初学者应该试着睡觉:

....
page.evaluate( function() { ... } );
window.setTimeout(
    function() {
        /* press submit button */
    },
    5000 /* wait 5 seconds (5,000ms) */
);
....