2016-07-24 62 views
4

使用Selenium WebDriver for Java,是否可以獲取給定指定URL的網頁的HTML?Java Selenium:如何在不首先加載頁面的情況下獲取網頁的HTML?

我知道,一旦網頁加載到瀏覽器中,就可以使用WebDriver.getPageSource()獲取HTML。但是,爲了提高效率,是否可以在不首先在瀏覽器中加載頁面的情況下獲取HTML?

+1

代替? – mob41

+0

如何在不加載它的情況下顯示html?唯一的想法,我可以推薦你是直接使用HTML請求。 –

+3

你可以使用無頭瀏覽器... :) –

回答

4

你可以做到這一點使用headless瀏覽器。

無頭瀏覽器是一個沒有圖形用戶界面的網頁瀏覽器。該程序的行爲與瀏覽器類似,但不會顯示任何GUI。

無頭的瀏覽器通常用於以下幾種情況: -

  • 你有一箇中央構建工具,它沒有安裝任何瀏覽器。因此,爲了在每次構建之後進行基本的理智測試,您可以使用無頭瀏覽器來運行測試。

  • 你想寫一個爬行程序,通過不同的頁面和收集數據,無頭瀏覽器將是您的選擇。因爲你真的不在乎打開瀏覽器。您所需要的只是訪問網頁。

  • 您想在同一臺機器上模擬多個瀏覽器版本。在這種情況下,你會想使用無頭瀏覽器,因爲它們大多支持模擬不同版本的瀏覽器。我們很快就會談到這一點。

事情要注意使用無頭瀏覽器之前

無頭的瀏覽器是模擬程序,他們是不是你真正的瀏覽器。大多數這些無頭瀏覽器已經足夠模擬,像一個真正的瀏覽器一樣非常近似。您仍然不想在無頭瀏覽器中運行所有測試。在使用無頭瀏覽器之前,JavaScript是您想要非常小心的一個領域。 JavaScript由不同的瀏覽器實現。雖然JavaScript是一種標準,但每個瀏覽器在實現JavaScript方面都有自己的小差異。在無頭瀏覽器的情況下也是如此。例如HtmlUnit無頭瀏覽器使用Rihno JavaScript引擎,該引擎沒有被任何其他瀏覽器使用。

一些無頭的驅動程序的例子包括

  • HtmlUnit
  • PhantomJS
  • ZombieJS
  • 爲什麼不使用`URLConnection`的Watir-webdriver的
2

的HttpRequest在JAVA:

public static String executePost(String targetURL, String urlParameters) { 
    HttpURLConnection connection = null; 

    try { 
    //Create connection 
    URL url = new URL(targetURL); 
    connection = (HttpURLConnection) url.openConnection(); 
    connection.setRequestMethod("POST"); 
    connection.setRequestProperty("Content-Type", 
     "application/x-www-form-urlencoded"); 

    connection.setRequestProperty("Content-Length", 
     Integer.toString(urlParameters.getBytes().length)); 
    connection.setRequestProperty("Content-Language", "en-US"); 

    connection.setUseCaches(false); 
    connection.setDoOutput(true); 

    //Send request 
    DataOutputStream wr = new DataOutputStream (
     connection.getOutputStream()); 
    wr.writeBytes(urlParameters); 
    wr.close(); 

    //Get Response 
    InputStream is = connection.getInputStream(); 
    BufferedReader rd = new BufferedReader(new InputStreamReader(is)); 
    StringBuilder response = new StringBuilder(); 

    String line; 
    while ((line = rd.readLine()) != null) { 
     response.append(line); 
     response.append('\r'); 
    } 
    rd.close(); 
    return response.toString(); 
    } catch (Exception e) { 
    e.printStackTrace(); 
    return null; 
    } finally { 
    if (connection != null) { 
     connection.disconnect(); 
    } 
    } 
} 
相關問題