gpt4 book ai didi

javascript - 使用 casperjs 轮询 RSS 提要不起作用

转载 作者:行者123 更新时间:2023-12-03 10:28:18 24 4
gpt4 key购买 nike

我尝试使用 casperjs waitFor() 来匹配 RSS 提要中的标记(字符串标记),但它似乎不起作用。还有其他方法(不使用轮询)来绕过,但我需要轮询。这是代码片段:

casper.then(function() {
this.waitFor(function matchToken() {
return this.evaluate(function() {
if(!this.resourceExists(token)) {
this.reload();
return false;
}
return true;
});
});
});

RSS 网址的更新不是动态的,因此需要刷新来检查 token 。但似乎(从访问日志来看)我在 rss url 上没有收到任何点击(重新加载不起作用)。理想情况下,如果页面没有看到 token ,我希望刷新页面,然后再次检查 token ,并且应该继续执行此操作,直到 waitFor 超时。

我还尝试使用assertTextExists()而不是resourceExists(),但即使这样也不起作用。

我正在使用 PhantomJS (1.9.7) & url 是:https://secure.hyper-reach.com:488/rss/323708

我正在寻找的 token 是 --> item/272935。如果您查看我上面提到的 url,您会在each guid 标记中找到它。我之所以将“item/”也包含在我的 token 中,是为了它不会错误地匹配任何其他数字。

最佳答案

evaluate() 是沙盒页面上下文。它内部的任何内容都无法访问外部定义的变量,并且 this 引用页面的 window 而不是 casper。您此处不需要 evaluate() 函数,因为您不访问页面上下文。

<小时/>

另一件事是 casper.resourceExists() 适用于资源元数据,例如 URL 和请求 header 。看来您想检查资源的内容。如果您使用 casper.thenOpen()casper.open() 打开 RSS feed,那么您可以使用 casper.getPageContent() 进行检查。 ,如果文本存在。

<小时/>

您的代码的实际问题是您以一种行不通的方式混合了同步和异步代码。 waitFor() 是一个错误的工具,因为您需要在执行过程中重新加载,但检查函数调用得如此之快,以至于可能不会完成页面加载。实际测试一下。

您需要递归地检查文档是否已根据您的喜好进行更改。

var tokenTrials = 0,
tokenFound = false;
function matchToken(){
if (this.getPageContent().indexOf(token) === -1) {
// token was not found
tokenTrials++;
if (tokenTrials < 50) {
this.reload().wait(1000).then(matchToken);
}
} else {
tokenFound = true;
}
}

casper.then(matchToken).then(function(){
test.assertTrue(tokenFound, "Token was found after " + tokenTrials + " trials");
});

关于javascript - 使用 casperjs 轮询 RSS 提要不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29323534/

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