gpt4 book ai didi

javascript - 重新运行 casperjs 脚本

转载 作者:行者123 更新时间:2023-11-30 17:30:33 25 4
gpt4 key购买 nike

我是 CasperJS 的新手,编写过简单的抓取脚本,现在我面临着一项更困难的任务:我想从 url 列表中抓取某种数据,但有时是某些页面”失败”,我有一个验证码解决服务,因为其中一些页面默认有验证码,但是 phantomjs 在呈现一些验证码时相当不一致,有时它们加载,有时它们不加载。

我认为的解决方案是使用无法加载验证码的页面重新运行脚本,以获得我需要的数据量。但我似乎没有让它运行,我想用整个东西创建一个函数,然后在 casper.run() 方法中调用它并检查抓取的数据量是否满足如果不重新运行,我需要最少,但我真的不知道如何完成它,至于我所看到的,casperjs 在调用函数之前将步骤添加到堆栈中(如果我错了请纠正我)。此外,我正在考虑使用 run.complete 事件,但不太确定如何去做。我的脚本是这样的:

// This variable stores the amount of data collected
pCount = 0;
urls = ["http://page1.com","http://page2.com"];
// Create casperjs instance...
casper.start();

casper.eachThen(urls, function(response) {
if (pCount < casper.cli.options.number) {
casper.thenOpen(response.data, function(response) {
// Here is where the magic goes on
})
}
})
casper.run();

我是否可以将 casper.eachThen() block 包装在一个函数中并执行类似的操作?

casper.start();
function sample () {
casper.eachThen(urls, function(response) {
if (pCount < casper.cli.options.number) {
casper.thenOpen(response.data, function(response) {
// Here is where the magic goes on
})
}
})
}
casper.run(sample);

此外,我尝试使用 slimerjs 作为引擎来避免“不一致”,但我无法设法在 casper.evaluate( ) 我有,所以这是一个交易破坏者。或者有没有办法在单独的实例中异步执行 GET 请求?如果是这样,我将不胜感激您的建议

更新:我从来没有设法用 casperjs 解决它,尽管如此,我还是为我的特定用例找到了解决方法,请查看我的答案以获取更多信息

最佳答案

也许有后退功能,所以类似的东西:

casper.start()
.thenOpen('your url');
.then(function(){
var count = 0;
if (this.exists("selector contening the captcha")){
//continue the script
}
else if (count==3){
this.echo("in 3 attempts, it failed each time");
this.exit();
}
else{
count++;
casper.back();//back to the previous step, so will re-open the url
}
.run();

关于javascript - 重新运行 casperjs 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23174950/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com