我使用firefox的imacros插件从在线数据库下载数据。它完美无缺,除非页面超时。我已经开始下载非常小的数据块,因为那时网站的出现次数要少得多,但它偶尔会超时。
问题是没有办法将if语句直接编码到imacros宏中,所以我想在它旁边运行一个greasemonkey脚本,如果它超时则刷新页面。该网站仅在一个地方为我提供时间,当它出现时,它显示以下内容: 无法打开文件
我从未学过Java或Javascript,而且我的所有编程经验都涉及数值方法,但我一直在拼凑代码并对其进行调整以尝试解决我的问题。
以下是我的基本代码:
var RefreshTime = '20';
var str1 = document.body.innerHTML
var str2 = "can't open file"
if (str1.search(str2) > 0) {
if (StRefTime > 0) setTimeout("location.reload(true);",RefreshTime*1000);
}
由于我正在运行此浏览器的浏览器目前仅用于此脚本,因此我只有@include *
基本上,这意味着每隔20秒就刷一次页面,并且不能打开文件"找到了网页。当我测试它时,这在其他网站上完美运行,但在我需要的网站上根本不起作用。值得注意的是,当我刷新时,firefox要求我确认重新发送帖子数据 - 但是imacros确实有一个我在这个网站上测试并运行的功能,可以在对话框显示时自动确认。
在做了一些阅读后,我发现其他人有类似的问题,我认为原因的根源是如果页面是通过AJAX到达的,那么greasemonkey会错过它。
为了解决这个问题,我尝试为这些人实施建议的解决方案,但我没有成功。例如,我尝试将上面列出的代码放入此处给出的解决方案中:Run Greasemonkey script on the same page, multiple times?,例如
var RefreshTime = '20';
var str1 = document.body.innerHTML
var str2 = "can't open file"
function highlightGoodComments (jNode) {
//***** YOUR CODE HERE *****
if (/str2/i.test (jNode.text () ) ) {
if (str1.search(str2) > 0) {
if (RefreshTime > 0) setTimeout("location.reload(true);",RefreshTime*1000);
}
}
但这也不起作用,我尝试了几种变体(例如摆脱str2,只是把#34;打开文件"以及类似的东西)和我也曾尝试过,但未能完成以下工作https://gist.github.com/BrockA/2625891。我还尝试将所有初始代码包装在一个setInterval循环中,希望它能不断检查"无法打开文件"即使没有任何页面加载,但也没有任何工作。
不幸的是,我在运行我的脚本的网站隐藏在付费专区后面,并且很难测试我的代码,因为它有点随机超时,因此无法检查我的代码是否存在代码在等待很长时间之后工作,看它是否失败。我对AJAX一无所知,所以我不确定如何确认这是发生了什么,但我仍然相信它是如此,因为我的问题似乎与其他人相似 - 当时我启用这个宏它似乎干扰了网站的其他部分,但没有干扰我的脚本工作的部分。
我希望有人可以帮助我,因为我已经被困在这里,已经在我脑海里了。即使你无法提供帮助,拥有一些我可以在不等几个小时的情况下测试代码的AJAX网站,对我来说,如果有人知道的话,我会自己解决这个问题。感谢您阅读本文,我非常感谢任何人提供的任何帮助。
答案 0 :(得分:0)
这个问题很长,所以我没有费心去读它。由于我不使用GreasMonkey,我可以告诉你iMacros解决方案。
Check if html element exists with iMacros and javascript
这是一个如何构建JS iMacros脚本并包含if子句的模型。你可以制作一个测试宏来测试这里是“无法打开”的网页。
您也可以尝试使用
SET !TIMEOUT_PAGE 120
命令将页面加载时间增加到120秒。如果可以提供帮助,请尝试其中一些。