2012-08-31 50 views
2

我試圖使用HtmlUnit自動瀏覽網站。我需要在這個過程中按下一些按鈕。 首先,我建一個按鈕的的HtmlAnchor對象與此XML:Htmlunit中的HtmlAnchor click()函數不起作用

<a href="dog.php"> 
    <img src="http://images.hand.co.uk/Pic/site_images/hand/Myper/MyOrder/images/DogRed.gif" width="75" height="31" border="0" alt="1 adds"/> 
</a> 

的正常工作,當我點擊它使用點擊()方法。 然後,我被移到另一個頁面,在這個頁面中,我需要點擊鏈接以顯示所需的內容。 點擊後,我不會移動到另一個頁面,它只是一個Java腳本函數觸發。

這是第二個鏈接錨:

<a style="color: black; font-weight: bold;" href="javascript:show_me('DogDetails.php?DogID=2445485', 2445485, 800);"> 
    details 
</a> 

對於這兩個我使用的HtmlAnchor對象與它的點擊()方法的元素。但是這種方法對於第二個元素什麼都不做。

我也嘗試過使用HtmlUnit中構建的JavaScript引擎,但沒有成功。 如何使用HtmlUnit平臺單擊此持久鏈接?

+0

莫非你會發布一些更多的細節嗎?當你點擊()JavaScript鏈接時,你怎麼知道它不工作?你期望在頁面上改變什麼? –

+0

點擊此後,我希望頁面發生變化。一些新的鏈接和圖片應該出現在頁面中。情況是前後頁面完全相同。 – uzil24

+0

硒是什麼意思?這個? http://docs.seleniumhq.org/docs/03_webdriver.jsp#selenium-webdriver-api-commands-and-operations – user3434609

回答

3

最可能的問題是HtmlUnit沒有等待JavaScript完成運行。 HtmlUnit常見問題建議3個解決方法:http://htmlunit.sourceforge.net/faq.html#AJAXDoesNotWork

其中,嘗試最巧妙的解決辦法是讓你的WebClient等待AJAX​​請求完成:

webClient.setAjaxController(new NicelyResynchronizingAjaxController()); 

我發現,有些網站還會在後臺線程上運行AJAX的巧招 - 這意味着NicelyResynchronizingAjaxController不會等待它完成,因爲它僅監視主UI線程。有一個很好的答案here,它解釋瞭如何等待所有線程而不是主要線程。

+0

我嘗試了所有這些方法。似乎沒有任何工作。我儘可能多地瞭解運行時代碼。看起來類似於 ScriptRuntime,在第3183行:result = f.doTopCall(callable,cx,scope,thisObj,args); 執行最初失敗,因爲'result'返回未定義。我無法理解爲什麼... – uzil24

+0

對於任何人訪問這個問題,我最終解決了我的問題。解決方案是切換到Selenium,沒有問題點擊提到的鏈接。 – uzil24

1

我有一個類似的問題,嘗試了幾種方法來等待JavaScript在後臺運行,但沒有成功。

我有點想切換到硒,但它的Web客戶端禁用CSS後「本身來解決」:

WebClient.getOptions().setCssEnabled(false); 

每當我們重新啓用了CSS的。點擊()剛剛停止工作。

我主播:

<div class="my-anchor's-parent-class"/> 
    <a href="javascript:void(0) class="text" id="buttonSearch" style="display: block;">Search</a> 
</div> 

它有一些JQuery的連接的。點擊()處理它,誰擔任基於我的錨的父級的「類」屬性:

$('.my-anchor's-parent-class').each(function() { 
     $(this).children('a').click(function() { 
      // if parent has another given class appended, call .myFunction(this) 
      // else, call other function 
     }); 
    });