2014-04-14 83 views
-3

我寫了一個小的Greasemonkey腳本,在這種類型的http://example.com/details.php?id=*&very=1打開鏈接,在這些鏈接點擊一個按鈕hello,但不知何故,無法工作寫一個腳本來打開新的鏈接,點擊一個按鈕

// ==UserScript== 
// @name  My Fancy New Userscript 
// @namespace http://use.i.E.your.homepage/ 
// @version 0.1 
// @description enter something useful 

// @include http://example.com/details.php?id=*&very=1 

// @copyright 2012+, You 
// ==/UserScript== 

    function sayhello(){ 
    for(var i=1;i<100;i++){ 
     window.location.href='http://example.com/details.php?id='+i+'&very=1' 
     $("#hello").click()} 
     } 
    }; 

    sayhello(); 

但這並不是我的期望。而且,由於新的href適合include規則,它總是加載和負載...

我把它改寫爲:

function sayhello(){ 
    var i=window.location.href.match(/\d+/) 
    j=Number(i)+1 
    window.location.href=window.location.href.replace(/\d+/, j); 
    $("#hello").click() 

    }; 

    sayhello(); 

工程進展緩慢,因爲每次都將加載全新的一頁,有時如果頁面中的某些內容不能正確加載,它將只停留在該頁面上等待並加載,然後崩潰。
如何跳過無法正確加載頁面並保證腳本運行?

如何加速它,我只需要點擊一個特定的按鈕,而不需要加載圖片或其他東西。

任何人都可以幫忙嗎?

謝謝。

+3

saythanks!= sayhello –

+0

大概是找'window.open'而不是'window.location' – Class

+0

我改正了它。抱歉。 – Ziu

回答

1

與其他運行在網頁上的JavaScript一樣,Greasemonkey腳本不會在頁面加載時保持狀態。因此,

for(var i = 1; i < 100; i++) { 
    window.location.href = 'http://example.com/details.php?id=' + i + '&very=1'; 
    $("#hello").click(); 
} 

將嘗試加載http://example.com/details.php?id=1&very=1。在這樣做時,它會自行卸載並丟棄其狀態。它不會達到$("#hello").click();

與其以程序方式查看它,不如這樣思考:您在網頁上。你想點擊按鈕,然後進入下一個網頁。考慮到這一點,你可以寫這樣的:

$("#hello").click(); 
var currentID = /* retrieve current ID from URL */; 
var nextID = currentID + 1; 
if(nextID < 100) { 
    window.location.href = 'http://example.com/details.php?id=' 
         + nextID + '&very=1'; 
} 

根據什麼$("#hello").click()做,你可能會或可能不會給它足夠的時間來完成它應該做的。在繼續進入下一頁之前,您可以通過添加一個setTimeout來解決這個問題,或者嘗試找到某種回調掛鉤。

最後,如果你想加快,不加載圖像或任何東西,那麼解決方案是不使用瀏覽器。使其運行速度最快的方法是找出究竟是什麼點擊#hello,然後在瀏覽器外部編寫腳本以模仿該操作。運氣好的話,你不需要加載圖片。

相關問題