Javascript 单击链接不会刷新内容

Javascript 单击链接不会刷新内容,javascript,html,automation,phantomjs,bots,Javascript,Html,Automation,Phantomjs,Bots,我一直在研究如何使用PhantomJS自动化网页上的操作,但是我在操作网页以实现我想要的功能时遇到了问题 我正在使用。我设法让Phantom打开网页,从结果栏中删除随机的句子。但是现在我想做的是在不重新启动脚本的情况下获得另一个句子。我不想关闭和重新打开页面,因为Phantom启动webkit和加载页面需要很长时间。所以我想我可以通过让Phantom点击句子框下方的“刷新”按钮来获得另一个句子。以下是我目前的情况: var page = require('webpage').create();

我一直在研究如何使用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”,但它不起作用。我想知道点击是否是正确的方式,幻影是否有办法提交按钮链接到的表单?或者我可以在获取句子的页面上运行相关脚本?我对此有点迷茫,所以我真的不知道应该使用哪种方法?

网络抓取是指将所需信息发送到web服务器并获得结果。这与用户单击按钮或输入搜索条件的行为无关。
在本例中,您只需向发送POST请求即可。结果就是page.content中的文本,它甚至不需要计算。因此,要获得多个句子,您只需执行页面循环。打开时,您的控制流有问题。page.includeJs是一个异步函数。如果您有一些其他语句page.includeJs,则它们可能在加载脚本和执行回调之前执行。这意味着在你的情况下,在你触发点击之前,你已经读了两遍这个句子

如果您想多次执行此操作,我建议使用递归,因为您无法同步编写此操作。此外,由于您希望这是快速的,因此不能使用超时为1秒的静态setTimeout,因为有时请求可能会更快,您会损失时间,有时脚本中断会更慢。你应该使用


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

谢谢您的回答。我对page.open的最初问题是,连接和获取数据需要很长时间,我希望能够相对无缝地获取一个新句子。如果只是将帖子发送到给定的地址,那么有没有一种方法可以在页面仍然打开时使用Phantom自动执行此操作?或者正在发送page.open命令的POST部分?如果打开到newrandom,可以尝试page.reload。但您可能需要测试可靠性。我每次搜索、进入详细页面、下载报告和PhantomJS崩溃的次数多达5次,总共需要3个小步骤来收集100K+的数据。。在更改为do page.open后,每个请求的可靠性都会稍高一些,大约每100个请求就会崩溃一次。也许只是https而不是http,我不确定。