单击链接不会刷新内容
Clicking a link does not refresh the content
我一直在研究如何使用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
- 刷新潜水内容不起作用
- 仅当javascript的新内容出现时,才每3秒更新一次javascript
- 如何在Ajax加载新内容时停止JavaScript执行
- 点击后,永久更改内容;悬停时,简要显示新内容
- 导致出现新内容块的标记(谷歌地图)
- CSS转换后用新内容替换空白
- 自动刷新潜水内容
- 如何在不刷新页面的情况下每次单击一组选项卡时刷新视图内容窗格
- 当用户到达页面右侧时加载新内容
- Angular/UI路由器-如何在不刷新所有内容的情况下更新URL
- 如何使用jQuery显示新内容
- 使用 Javascript 在页面末尾附加新内容
- jQuery弹出显示旧内容,而不是新内容
- JSON加载新内容后访问元素
- 加载新内容时调整iframe的高度
- JqueryUI(手风琴)效果在替换为新内容后无法加载
- 刷新 Div 内容(仅限本地.html)
- 删除现有内容并附加新内容
- 如何在Jquery Mobile 1.4.5中刷新新的Div内容
- Javascript替换内容并用来自outerHTML的新内容刷新它