2016-12-16 32 views
0

提交按鈕單擊後無法到達新頁面問題如下:當我運行此代碼時,它將運行到submitButton.fireEvent("onclick").getNewPage(),那麼即使最後的System.out.println(pageAfterLogin.getUrl().toString())未執行,它似乎也會結束。程序執行期間沒有發生錯誤。HTMLUnit

import com.gargoylesoftware.htmlunit.WebClient; 
import com.gargoylesoftware.htmlunit.html.HtmlElement; 
import com.gargoylesoftware.htmlunit.html.HtmlInput; 
import com.gargoylesoftware.htmlunit.html.HtmlPage; 
import java.util.List; 

public class WebScraperHTMLUnit2 { 

public static void main(String[] args) { 
    try{ 
     WebClient wc = new WebClient(); 
     HtmlPage page = wc.getPage("https://www.google.com/"); 

     HtmlInput searchForm = (HtmlInput)page.getFirstByXPath("//input[@name='q']"); 
     searchForm.setValueAttribute("q"); 

     HtmlElement submitButton = page.getFirstByXPath("//button[@id='searchButton']"); 
     HtmlPage pageAfterLogin = (HtmlPage) submitButton.fireEvent("onclick").getNewPage(); 

     System.out.println(pageAfterLogin.getUrl().toString()); 

    } catch (Exception ex) {}  
}  
} 

下面是NetBeans的輸出日誌:

run: 
дек 16, 2016 2:38:16 PM com.gargoylesoftware.htmlunit.DefaultCssErrorHandler error 
WARNING: CSS error: 'https://www.google.ru/' [1:14018] Error in expression. (Invalid token " ". Was expecting one of: <NUMBER>, "inherit", <IDENT>, <STRING>, <HASH>, <EMS>, <EXS>, <LENGTH_PX>, <LENGTH_CM>, <LENGTH_MM>, <LENGTH_IN>, <LENGTH_PT>, <LENGTH_PC>, <ANGLE_DEG>, <ANGLE_RAD>, <ANGLE_GRAD>, <TIME_MS>, <TIME_S>, <FREQ_HZ>, <FREQ_KHZ>, <RESOLUTION_DPI>, <RESOLUTION_DPCM>, <PERCENTAGE>, <DIMENSION>, <UNICODE_RANGE>, <URI>, <FUNCTION>, "progid:".) 
дек 16, 2016 2:38:16 PM com.gargoylesoftware.htmlunit.DefaultCssErrorHandler error 
WARNING: CSS error: 'https://www.google.ru/' [1:14042] Error in expression. (Invalid token " ". Was expecting one of: <NUMBER>, "inherit", <IDENT>, <STRING>, <HASH>, <EMS>, <EXS>, <LENGTH_PX>, <LENGTH_CM>, <LENGTH_MM>, <LENGTH_IN>, <LENGTH_PT>, <LENGTH_PC>, <ANGLE_DEG>, <ANGLE_RAD>, <ANGLE_GRAD>, <TIME_MS>, <TIME_S>, <FREQ_HZ>, <FREQ_KHZ>, <RESOLUTION_DPI>, <RESOLUTION_DPCM>, <PERCENTAGE>, <DIMENSION>, <UNICODE_RANGE>, <URI>, <FUNCTION>, "progid:".) 
дек 16, 2016 2:38:16 PM com.gargoylesoftware.htmlunit.IncorrectnessListenerImpl notify 
WARNING: Obsolete content type encountered: 'text/javascript'. 
СБОРКА УСПЕШНО ЗАВЕРШЕНА (общее время: 3 секунды) 

回答

1

該按鈕的XPath是不正確。按鈕是:

<input value="Google Search" aria-label="Google Search" name="btnK" type="submit" jsaction="sf.chk"> 

你的代碼應該是這樣的:

try { 
    final WebClient wc = new WebClient(); 
    wc.getOptions().setThrowExceptionOnScriptError(false); 

    HtmlPage page = wc.getPage("https://www.google.com/"); 

    HtmlInput searchForm = page.getFirstByXPath("//input[@name='q']"); 
    searchForm.setValueAttribute("q"); 

    HtmlSubmitInput submitButton = page.getFirstByXPath("//input[@name='btnK']"); 
    HtmlPage pageAfterLogin = submitButton.click(); 

    System.out.println(pageAfterLogin.getUrl().toString()); 

} catch (Exception e) {} 

需要setThrowExceptionOnScriptError添加到虛假的原因是因爲一個錯誤被拋出(原因不明),而你沒有想要停止執行代碼,因爲它。

根據this post,www.google.com上生成的HTML不斷變化。 所以我的輸入[@ name ='btnK'] xpath可能在將來不起作用。