2013-10-28 44 views
1

我有一個用Htmlunit編寫的程序,可以從網站上的多個頁面返回信息。問題是,前兩頁返回正常,然後返回其他所有頁面(返回頁面1,2,4,6等)。我相信我提到的所有變量都是正確的,所以我不確定問題是與服務器與程序進行通信還是其他問題。我的代碼是:Html單擊按鈕跳過頁面單擊

public static void scrapeWebsite() throws IOException { 

    final WebClient webClient = new WebClient(); 
    final HtmlPage page = webClient.getPage(s); 
    originalHtml = page.getWebResponse().getContentAsString(); 
    obtainInformation(); 
    originalHtml = ""; 

    //////code below returns page 2 as expected//// 

    final HtmlForm form = page.getForms().get(0); 
    final HtmlSubmitInput button = form.getInputByValue(">"); 
    final HtmlPage page2 = button.click(); 
    try { 
     synchronized (page2) { 
     page2.wait(5000); 
     } 
    } 
    catch(InterruptedException e) 
    { 
     System.out.println("error"); 
    } 
    originalHtml = originalHtml + page2.refresh().getWebResponse().getContentAsString(); 
    obtainInformation(); 
    originalHtml = ""; 


    /////// code below returns page 4, instead of page 3///// 

    final HtmlForm form2 = page2.getForms().get(0); 
    final HtmlSubmitInput button2 = form2.getInputByValue(">"); 
    final HtmlPage page3 = button2.click(); 
    try { 
     synchronized (page3) { 
     page3.wait(5000); 
     } 
    } 
    catch(InterruptedException e) 
    { 
     System.out.println("error"); 
    } 
    originalHtml = originalHtml + page3.refresh().getWebResponse().getContentAsString(); 
    obtainInformation(); 
} 

我能想到的唯一的問題是,當page.refresh()運行它本質上雙擊該按鈕,但沒有page.refresh()第1頁上的信息是剛剛返回了3次。另外,s是指網站的字符串。

回答

0

沒有看看你想要獲取的頁面,有一些東西在你的代碼中實際上有些奇怪。

  1. 您有複製/粘貼的代碼。這是不正確的,導致難以遵循代碼並且非常容易出錯。確保您將代碼模塊化,以便您不必爲每個頁面重複該代碼。
  2. 目前還不清楚你在用originalHtml變量做什麼。看起來它是一個靜態變量,只能用該方法編寫。你似乎沒有在那裏讀它,所以你可能在obtainInformation()方法中讀取它,在這種情況下,它應該只用於該方法。更何況你要指定它的價值"",然後頁面的值,使分配""不必要的。
  3. 我沒有看到任何理由對HtmlUnit返回的原始Html而不是其XML表示進行操作。您應該用page.asXml()替換page.getWebResponse().getContentAsString()。當然,如果您確實需要將頁面的原始Html保存到文件中,請保持原樣。
  4. 我看不到有任何理由在那裏執行refresh()。你得到page2並等待5秒(盲目地認爲該頁面是可以在其上操作的新內容)。然後,不要在page2上運行,而是刷新它並獲取新頁面的內容。這可能是您正確獲取第一頁的原因,其餘的間隔爲2.

這些只是一些一般的意見,應該對您有所幫助。他們不一定會解決問題,但應該大大改善您的代碼。

+0

刷新需要一些,而其他人不需要刷新。我相信網站的某些內容會導致每次迭代需要不同的代碼。 – Ctech45