单击链接不会刷新内容

Clicking a link does not refresh the content

本文关键字:刷新 新内容 链接 单击      更新时间:2023-09-26

我一直在研究如何使用PhantomJS在网页上自动执行操作,但我在操作页面以执行我想要的操作时遇到了问题。

我正在用这里作为测试场地。我已经设法让Phantom打开网页,并从#结果跨度中抓取随机句子。但现在我想做的是在不重新启动剧本的情况下再写一句话。我不想关闭并重新打开页面,因为Phantom需要很长时间才能启动webkit并加载页面。所以我想我可以通过让Phantom点击句子框下面的"刷新"按钮来获得另一个句子。以下是我目前拥有的:

var page = require('webpage').create();
console.log("connecting...");   
page.open("http://watchout4snakes.com/wo4snakes/Random/RandomSentence", function(){    
    console.log('connected');
    var content = page.content;
    var phrase = page.evaluate(function() {
        return document.getElementById("result").innerHTML;
    });
    console.log(phrase);
    page.includeJs("http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js", function() {
        page.evaluate(function() {
            $("frmSentence").click();
        });
    });
    var content = page.content;
    var phrase = page.evaluate(function() {
        return document.getElementById("result").innerHTML;
    });
    console.log(phrase);
    phantom.exit();
});

正如你所看到的,我正试图通过使用.click()函数来点击刷新按钮,但这对我来说不起作用,因为我仍然会得到与之前相同的句子。给定按钮的HTML:

<form action="/wo4snakes/Random/NewRandomSentence" id="frmSentence" method="post" novalidate="novalidate">        
    <p><input type="submit" value="Refresh"></p>
</form>

我不确定我应该在要点击的脚本中引用什么?我正在尝试表单ID"frmSentence",但它不起作用。我想知道.click()是否是正确的方法,Phantom是否有办法提交按钮链接到的表单?或者我可以在得到句子的页面上运行相关的脚本?我对这个有点不知所措,所以我真的不知道该用哪种方法?

您的控制流有问题。page.includeJs是一个异步函数。如果您有一些其他语句page.includeJs,它们很可能是在加载脚本和执行回调之前执行的。这意味着在你的情况下,你甚至在点击之前就已经读了两遍这个句子。

如果你想多次这样做,我建议使用递归,因为你不能同步地写。此外,由于您希望这是快速的,因此不能使用超时为1秒的静态setTimeout,因为有时请求可能会更快(您会浪费时间),有时会更慢(您的脚本会中断)。您应该使用示例中的waitFor

您可以向上移动page.includeJs并在其回调中包含其他所有内容,而不是每次都加载jQuery。如果你只需要点击一个元素,或者如果jQuery点击不起作用(是的,这种情况不时发生),你应该使用PhantomJS;单击某个图元。

web抓取是将需求信息发送到web服务器并获得结果。这与用户点击按钮或输入搜索条件无关。在本例中,您只需要向http://watchout4snakes.com/wo4snakes/Random/NewRandomSentence.结果只是page.content中的文本,甚至不需要评估。因此,要获得多个句子,您只需要循环page.open