2010-10-09 68 views
3

我正在研究一個應用程序,它將使用Java中的htmlunit自動單擊網頁上的按鈕。唯一的問題是該按鈕是一個JavaScript按鈕,所以標準getInputByName()將不起作用。任何與此有關的建議?該按鈕的代碼包含在下面。如何用htmlunit單擊一個javascript按鈕?

<a class="vote_1" id="1537385" href="/javascript%3Avoid%280%29/index"><img src="/images/parts/btn-vote.gif" alt="Btn-vote" /></a> 

另外,這裏是其他的投票代碼。

<div id="content"><script type="text/javascript" src="/js/scriptFeeds/voteArticle.js"></script> 

這導致了以下的javascript:

var pressed = new Array(); 

$j(document).ready(function() { 
var nr = $j("input#number_of_articles").val(); 
for(var i=1; i<=nr; i++){ 
    $j("a.vote_"+i).click(function(){ 
     var article = $j(this).attr("id"); 
     $j('#'+article).hide(); 
     if (!pressed[article]) { 
      pressed[article] = "yes"; 
      jQuery.post('/vote-article', { 
       _token: $j("#_token").val(), 
       article_id: article 
      },function(data) { 
       $j("span.numberOfVotes_"+data.id).html(data.votes); 
      }, "json"); 
     } 
     return false; 
    }); 
} 
}); 
+0

我知道,打算使用java與htmlunit。 – Laxsnor 2010-10-09 21:07:59

回答

12

嘗試使用這個插件的Firefox,它記錄你的行動,併產生同化的HtmlUnit代碼。可能會有所幫助。 http://code.google.com/p/htmlunitscripter/

+0

感謝提到htmlunitscripter。它幫助我的[screenscraping問題](http://stackoverflow.com/questions/6704209/downloading-morningstar-webpages-for-screenscraping/)。 – DannyTree 2011-07-22 15:07:30

9

沒有什麼特別的可點擊圖像。像這樣的東西應該工作:

button = page.getHtmlElementById("1537385") ; 
page = button.click() ; 

HtmlUnit然後將運行Javascript並返回更新的頁面。

如果'a'標記的id屬性不固定,則可能需要使用XPath來抓取它。

+0

+1直接回答 – 2012-12-18 19:54:51

5

我在其中一頁上有非常類似的鏈接。如果你可以在任何HtmlElement上調用.click(),它應該能夠運行相關的Javascript。這裏是我的代碼(從HtmlUnitScripter生成):

HtmlElement element4 = null; 
Iterable<HtmlElement> iterable5 = page.getAllHtmlChildElements(); 
Iterator<HtmlElement> i6 = iterable5.iterator(); 
while(i6.hasNext()) 
{ 
    HtmlElement anElement = i6.next(); 
    if(anElement instanceof HtmlImage) 
    { 
     HtmlImage input = (HtmlImage) anElement; 
     String[] elements = "http://example.com/pages/powerbutton.png".split("/"); 

     if(input.getSrcAttribute().indexOf(elements[elements.length-1])> -1) 
     { 
      element4 = input; 
      break; 
     } 
    } 
} 

HtmlPage page = element4.click(); 
+0

感謝您創建htmlunitscripter。它幫助我的[screenscraping問題](http://stackoverflow.com/questions/6704209/downloading-morningstar-webpages-for-screenscraping/)。 – DannyTree 2011-07-22 15:08:00

相關問題