1

我正在使用适用于 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 脚本?, 例如

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 并只放置“打开文件”之类的东西),我也尝试过但未能完成以下工作https://gist.github.com/BrockA/2625891。我还尝试将所有初始代码包装在一个 setInterval 循环中,希望即使没有任何页面加载,它也会不断检查“无法打开文件”,但这也不起作用。

不幸的是,我正在运行我的脚本的网站隐藏在付费墙后面,并且很难测试我的代码,因为它有点随机超时,所以除了等待很长时间并查看它是否可以检查我的代码是否有效之外,无法检查失败的。我对 AJAX 一无所知,所以我不确定如何确认这是正在发生的事情,但我仍然相信是这样,因为我的问题似乎与其他人的问题相似 - 当我启用此宏时,它似乎确实会干扰网站的其他部分,但不是我的脚本适用的部分。

我希望有人可以帮助我,因为我被困在这里并且已经在我的头上。即使您无能为力,如果有人知道的话,拥有某种 AJAX 网站,我可以在其中测试代码而无需等待几个小时,这将有助于我自己尝试解决这个问题。感谢您阅读本文,我非常感谢任何人可以提供的任何帮助。

4

1 回答 1

0

这个问题很长,所以我没有费心去真正阅读它。由于我不使用 GreasMonkey,我可以告诉您 iMacros 解决方案。

使用 iMacros 和 javascript 检查是否存在 html 元素

这是一个如何构建 JS iMacros 脚本并包含 if 子句的模型。您可以制作一个测试宏,测试在此处“无法打开”网页。

你也可以尝试使用

SET !TIMEOUT_PAGE 120

命令将页面加载时间增加到 120 秒。如果有帮助,请尝试其中一些。

于 2013-05-02T18:16:00.823 回答