我一直在寻找如何使用PhantomJS自动化网页上的操作,但是我有问题操纵页面来做我想做的事。我正在使用this as test site。我已经设法让Phantom打开网页,并从#result范围中删除随机句子。但是现在我想要做的是在不重新启动脚本的情况下获得另一个句子。我不想关闭并重新打开页面,因为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()
是正确的方式去做这件事,有没有什么方法幻影提交按钮链接到的形式?或者,也许我可以在获取该句子的页面上运行关联的脚本?我有点迷失在这一个,所以我不知道我应该去哪个方法?
感谢您的回答。我使用'page.open'的最初问题是需要很长的时间来连接和获取数据,我希望能够相对无缝地获得一个新句子。如果只是将POST发送到给定的地址,那么在页面仍然打开的情况下,是否可以使用Phantom自动执行此操作?或者正在发送'page.open'命令的POST部分? – kmahon99 2014-09-26 11:56:38
如果你打开'NewRandomSentence',你可以尝试'page.reload()'。但是你可能需要测试可靠性。我每次用3个迷你步骤搜索100K +数据(搜索,到详细页面,下载报告),并且PhantomJS经常碰撞5次请求。更改后为每个请求做page.open它稍微更可靠,每次崩溃100个请求左右。也许这只是为了https而不是http我不确定。 – wayne 2014-09-26 12:24:11