2013-04-30 122 views
0

我正在使用Firefox的imacros插件從在線數據庫下載數據。它完美的工作,除非頁面超時。我已經開始下載非常小的數據塊,因爲那時網站的使用時間要少得多,但偶爾也會超時。刷新greasemonkey腳本的問題頁面

問題是沒有辦法編碼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,只是把「打開文件」和類似的東西),我也試過,並沒有做出以下工作https://gist.github.com/BrockA/2625891。我也嘗試將所有的初始代碼包裝在一個setInterval循環中,希望即使沒有任何頁面加載,它也會經常檢查「無法打開文件」,但這也不起作用。

不幸的是,我運行我的腳本的網站隱藏在付費牆後面,並且很難測試我的代碼,因爲它隨機超時,因此無法檢查我的代碼是否在等待很長時間並看看它是否失敗。我對AJAX一無所知,所以我不知道如何確認這是發生了什麼,但我仍然相信它是如此,因爲我的問題似乎與其他人的問題類似 - 當我啓用此宏時,它確實似乎干擾網站的其他部分,但不是我的腳本工作的部分。

我希望有人可以幫助我,因爲我在這裏很困難,已經在我的頭上。即使你無法提供幫助,如果有人知道某個AJAX網站,我可以在不需要等待幾個小時的情況下測試代碼的某種類型的AJAX網站,這對我嘗試自己弄清楚這一點很有幫助。感謝您閱讀本文,我真的很感謝任何人可以提供的幫助。

回答

0

這個問題很長,所以我沒有真正閱讀它。由於我不使用GreasMonkey,我可以告訴你iMacros解決方案。

Check if html element exists with iMacros and javascript

這裏是一個模型是如何內置JS腳本的iMacros,包括if子句。您可以製作一個測試宏,在這裏測試是「無法打開」網頁。你

也可以嘗試使用

SET !TIMEOUT_PAGE 120 

命令來提高頁面加載的時間爲120秒。嘗試一些這些,如果它可以幫助。