2012-09-03 144 views

回答

6

這裏是一個完整的腳本是這樣做的。它使用jQuery的the :contains() selector

更新:修改後的腳本來說明報告的AJAX。

// ==UserScript== 
// @name  _Click on a specific link 
// @include http://YOUR_SERVER.COM/YOUR_PATH/* 
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js 
// @require https://gist.github.com/raw/2625891/waitForKeyElements.js 
// @grant GM_addStyle 
// ==/UserScript== 
/*- The @grant directive is needed to work around a major design change 
    introduced in GM 1.0. 
    It restores the sandbox. 
*/ 

//--- Note that contains() is CASE-SENSITIVE. 
waitForKeyElements ("a.simplebutton:contains('follow')", clickOnFollowButton); 

function clickOnFollowButton (jNode) { 
    var clickEvent = document.createEvent ('MouseEvents'); 
    clickEvent.initEvent ('click', true, true); 
    jNode[0].dispatchEvent (clickEvent); 
} 

注:在某些情況下,項會錯誤地觸發。例如,如果有<a class="simplebutton">unfollow</a>按鈕。
以下是防止錯誤點擊的方法。修改clickOnFollowButton功能,像這樣:

function clickOnFollowButton (jNode) { 
    if (! /^\s*follow\s*$/i.test (jNode.text())) { 
     /*--- If the node contains anything but "follow" (surrounded by 
      optional whitespace), don't click it. 
     */ 
     return false; 
    } 
    var clickEvent = document.createEvent ('MouseEvents'); 
    clickEvent.initEvent ('click', true, true); 
    jNode[0].dispatchEvent (clickEvent); 
} 

幾件事情:

  1. getElementsByClassName()返回一個列表或元素的 「收藏」。你不能只是.submit()這樣的結果。 .submit()適用於單個元素。

  2. 由於這是一個鏈接.submit()將無法​​正常工作。 .click()通常會工作,但通常不會 - 當一個鏈接被一個事件監聽器授權時(這個問題肯定是這種情況)。

    上面給出的代碼clickEvent幾乎適用於所有情況。

  3. The page code you gave沒有任何鏈接,其中class="simplebutton"和文本包含find

  4. 您使用的是什麼瀏覽器?哪個Greasemonkey版本?什麼操作系統?

  5. 查找並使用適當的javascript引用和適當的DOM引用。問題中列出的參考文獻是,它不是標準的,並且不包含在腳本中(很可能)。

  6. 使用CSS路徑,其比XPATH容易得多,對於這種事情。 Firebug會顯示給定元素的CSS路徑。
    jQuery使用CSS選擇器/路徑,document.querySelector()(非jQuery方法)也是如此。

+0

感謝您的努力!我真的很感激。可悲的是你的代碼不能按預期工作。當然,這是我的錯,因爲我不是專家,所以我給了錯誤的信息。在我看來,我想點擊的按鈕在加載初始頁面後加載,所以通用汽車無法識別它。 如果你有一個instagram帳戶,你可以登錄這個網站:http://ink361.com,我想要點擊關注按鈕。 – KingBOB

+2

這是一個很大的疏忽。你可能應該贊同兩個答案來彌補。無論如何,我沒有Instagram帳戶,但是我已將腳本更改爲與AJAX一起使用的位置。無論該按鈕何時出現,它都會啓動。只要確保它是「遵循」而不是「遵守」(案件對此非常重要)。 –

+0

感謝您的支持人!現在它按預期工作:對不起,如果我的問題不完整,應該是! – KingBOB

1

您需要使用方法click而非submit。當您想要提交表格時,您可以使用submit

getElementsByClassName也返回一個元素數組,你需要檢索一個你想要的然後調用click就可以了。

document.getElementsByClassName('simplebutton')[0].click();​ 

http://jsfiddle.net/kLDde/

+1

仍然無法工作 – KingBOB

+0

@Giorgio忘了關於從數組中選擇一個元素。您不能單擊通用數據結構,但可以單擊HtmlElement。 –

+0

'.click()'無處不在,因爲你已經發現了事件,爲什麼你需要調用'submit()'? –