我是CasperJS的初学者,我喜欢用刮痧尝试新事物。我的问题:
我可以登录youtube并喜欢视频,但是我找不到像youtube一样的youtube评论的正确XPath。
http://tinypic.com/r/2vayr83/8
这是我坚持的部分,我总是得到错误:
wait timeout of 5000ms expired exiting-
所以我猜这是因为XPath不正确而且我想在特定评论上这样做。我怎么能这样做?
casper.waitForSelector(x('//*[@id="update-z132gvlzosmchn30f225wng5gluzgbs5o04"]/div/div/div[1]/div[4]/div[3]/img'), function() {
this.click('//*[@id="update-z132gvlzosmchn30f225wng5gluzgbs5o04"]/div/div/div[1]/div[4]/div[3]/img');
this.capture('like.png')
this.echo("liked");
});
答案 0 :(得分:1)
Youtube评论主题是在iframe中加载的,因此您需要先在iframe中进行更改,然后才能在其中执行操作。您可以使用casper.withFrame()
步骤功能执行此操作。请注意选择正确的iframe,因为有多个iframe。
另一件事是,几乎所有CasperJS函数默认只接受CSS选择器,但是对click
使用XPath表达式。您必须使用CasperJS提供的XPath实用程序来告诉CasperJS传递的字符串包含XPath表达式而不是CSS选择器。
另一个问题可能是iframe只在滚动到视图后才会加载。您可能需要滚动到底部。 CasperJS提供scrollToBottom()
功能来执行此操作。您还需要等到向下滚动后将iframe放入页面。
完整(未经测试)的脚本:
var casper = require('casper').create();
casper.start(url, function(){
this.scrollToBottom();
this.scrollToBottom();
});
casper.waitForSelector('.comments-iframe-container iframe', function(){});
casper.withFrame(1, function(){
var link = '//*[@id="update-z132gvlzosmchn30f225wng5gluzgbs5o04"]/div/div/div[1]/div[4]/div[3]/img';
this.waitForSelector(x(link), function() {
this.click(x(link));
this.wait(1000, function(){
this.capture('like.png')
this.echo("liked");
});
});
}).run();