单击一个按钮,直到它在CasperJS中消失
Click on a button until it disappears in CasperJS
我有这个代码示例:
function clickOldShares() {
console.log("Waiting for all shares");
element = document.querySelector("#pagelet_scrolling_pager > div > div > a");
return element;
}
casper.thenOpen("https://www.facebook.com/shares/view?id=" + fb_objectID,function(){
console.log("Open post with object-id");
});
casper.then(function(){
element = this.evaluate(clickOldShares);
});
casper.wait(2000,function() {
console.log('ELEMENT1: ' + element);
element = this.evaluate(clickOldShares);
});
casper.wait(2000,function() {
newelement = this.evaluate(clickOldShares);
console.log('ELEMENT2: ' + newelement);
});
casper.wait(2000,function() {
newelement = this.evaluate(clickOldShares);
console.log('ELEMENT3: ' + newelement);
});
我不明白如何使用 CasperJS 将此调用转换为循环中的clickOldShares
casper.wait
因为它是异步的。请问我可以举一些如何做到这一点的例子吗?
页面不会一次加载所有数据。有必要单击"旧共享"按钮,直到数据出现。这可能会发生很多次,具体取决于数据量。因此,在捕获数据之前,我需要根据需要经常单击。
首先,你不能像现在这样将clickOldShares
用于任何事情。 casper.evaluate()
提供对 DOM 的访问,但传入的函数是沙盒化的并在页面上下文中执行。所有数据都必须显式传入和传出,这必须是原始的。DOM 元素不是原始的,不能从页面上下文中传递出去(this.evaluate(clickOldShares)
总是返回 null
)。您必须在页面上下文中调用单击代码。
您可以等待元素与 waitForSelector
一起出现。你真的不需要迭代来等待它。
var selector = "#pagelet_scrolling_pager > div > div > a";
casper.start()
.thenOpen(url)
.waitForSelector(selector, null, null, 15000); // max 15 seconds
.then(function(){
this.capture("screen1.png");
this.click(selector);
})
.then(function(){
this.capture("screen2.png");
})
.run();
waitForSelector
的第三个参数是达到超时但找不到元素时的回调。第四个参数是自定义超时。默认超时设置为 10 秒。
似乎您需要单击某个选择器,直到它消失。您不能为此使用循环,因为这些函数是异步的。你将不得不像这样使用递归:
var selector = "#pagelet_scrolling_pager > div > div > a";
var i = 0;
function step() {
if (this.exists(selector)) {
this.capture("screen"+(i++)+".png");
this.click(selector);
this.wait(2000, step);
} else {
this.capture("screen_final.png");
}
}
casper.start()
.thenOpen(url)
.then(step)
.then(function(){
// TODO: do something else
})
.run()
相关文章:
- facebook”;添加评论“;popup获胜'不要消失
- CasperJS在使用sendKeys时不会上传文件
- 为什么js事件消失了
- JS文件的路径正在消失
- I'我设计了一个下拉菜单,onclick会出现,而on blur会消失
- 我如何才能让CasperJS和PhantomJS在约塞米蒂玩得很好
- Morris.js折线图x轴标签在调整大小后消失
- JavaScript下拉菜单-部件在Mac上消失
- 从node.js向CasperJS传递参数数组
- 将display属性更改为visible flicks,然后再次消失
- TinyMCE实例在切换角度路由选项时会消失
- CasperJS在每个URL中循环
- 将phonegap图像发布到php/mysql-图像字段从发布请求中消失
- Jquery UI对话框不会消失
- 通过单击同一图标使菜单出现和消失
- '单击'事件在Backbone中消失.使用流沙后查看
- Android上的引导弹出窗口在页面滚动后消失
- 当已经使用CasperJS选择了css类元素时,断言该类的存在
- 如何使键盘在多页的Iphone窗体上消失
- 单击一个按钮,直到它在CasperJS中消失