2017-01-22 44 views
0

我正在嘗試編寫自動更新頁面內容(在我的帳戶內)的應用程序。我使用HTMLUnit是因爲它支持javascript。 但我面臨「你的瀏覽器太舊」的問題。HTMLUnit Java太舊的瀏覽器

我的代碼:

public static void main(String[] args) { 
     Locale.setDefault(Locale.ENGLISH); 
     try (final WebClient client = new WebClient(BrowserVersion.FIREFOX_45)) { 
      client.getOptions().setUseInsecureSSL(true); 
      client.setAjaxController(new NicelyResynchronizingAjaxController()); 
      client.getOptions().setThrowExceptionOnFailingStatusCode(false); 
      client.getOptions().setThrowExceptionOnScriptError(false); 
      client.waitForBackgroundJavaScript(30000); 
      client.waitForBackgroundJavaScriptStartingBefore(30000); 
      client.getOptions().setCssEnabled(false); 
      client.getOptions().setJavaScriptEnabled(true); 
      client.getOptions().setRedirectEnabled(true); 

      HtmlPage page = client.getPage("https://passport.yandex.ru/passport?mode=auth&retpath=https://toloka.yandex.ru/?ncrnd=5645"); 

      HtmlForm form = page.getForms().get(0); 

      HtmlInput inputLogin = form.getInputByName("login"); 

      inputLogin.setValueAttribute(userName); 
      HtmlInput inputPassw = form.getInputByName("passwd"); 

      inputPassw.setValueAttribute(password); 

      DomElement button = page.getElementsByTagName("button").get(0); 
      HtmlPage page2 = button.click(); 

      System.out.println(page2.asXml()); 
     } 
     catch (IOException e) { 

     } 
    } 

登錄是成功的,但我不能加載第二頁。 (應該重定向到內容頁)

答:

<h1 style="padding-top: 20px;">Browser is too old</h1> 
    <p> 
     Unfortunately you are using an old browser. 
     Please, upgrade to at least IE10 or use one of the modern browsers, e.g. 
     <a href="http://browser.yandex.net/">Yandex.Browser</a>, 
     <a href="https://www.google.com/chrome/browser/">Google Chrome</a> or 
     <a href="https://www.mozilla.org/firefox/new/">Mozilla Firefox</a> 
    </p> 

我怎樣才能解決呢?謝謝。

回答

1

對於您的問題沒有簡單的解決方案,但您可以執行一些操作。

  1. 可以使用HtmlUnit(http://htmlunit.sourceforge.net/gettingLatestCode.html
  2. 的最新快照生成具有不同的模擬瀏覽器(如鉻)
  3. 清理您的客戶端設置,只設置所需要的選項嘗試(在你的情況可能setUseInsecureSSL(真) ;
  4. waitForBackgroundJavaScript和waitForBackgroundJavaScriptStartingBefore沒有選擇;在客戶端安裝程序這樣做是沒用的
  5. 檢查你的日誌,也許有關於不支持的一些提示JavaScript方法

在按鈕點擊後放置waitForBackgroundJavaScript的調用; mabey的重定向是由一些JavaScript完成的一個小的延遲。

HtmlPage page2 = button.click(); 
client.waitForBackgroundJavaScript(30000); 

而且由於javascript可能會改變頁面內容,所以您必須再次獲取頁面內容。

page2 = page2.getEnclosingWindow().getEnclosedPage(); 

通常對瀏覽器版本的檢查是通過一些javascript魔術來完成的。 HtmlUnit可能並未(正確)支持/模擬您的網站使用的魔術。如果你能找到這個根本原因,你可以填寫一個bug(參見http://htmlunit.sourceforge.net/submittingJSBugs.html瞭解一些提示如何找到它)。

+0

謝謝,但它沒有幫助。 2017年1月22日下午8:57:38 com.gargoylesoftware.htmlunit.IncorrectnessListenerImpl通知 警告:遇到過時的內容類型:'application/x-javascript'。 (我不知道這是什麼意思,因爲我根本不知道JS) – Limmy

+0

那麼,在java中沒有任何方式來做這個應用程序? 「 – Limmy

+0

」謝謝,但它沒有幫助「 - 什麼沒有幫助?關於日誌輸出:這是一個警告,這個可以忽略。如果你想自動化一個網頁,你需要一個關於網頁基礎的良好知識,比如Http,Html和Javascript。 – RBRi