使用Selenium WebDriver for Java,是否可以獲取給定指定URL的網頁的HTML?Java Selenium:如何在不首先加載頁面的情況下獲取網頁的HTML?
我知道,一旦網頁加載到瀏覽器中,就可以使用WebDriver.getPageSource()獲取HTML。但是,爲了提高效率,是否可以在不首先在瀏覽器中加載頁面的情況下獲取HTML?
使用Selenium WebDriver for Java,是否可以獲取給定指定URL的網頁的HTML?Java Selenium:如何在不首先加載頁面的情況下獲取網頁的HTML?
我知道,一旦網頁加載到瀏覽器中,就可以使用WebDriver.getPageSource()獲取HTML。但是,爲了提高效率,是否可以在不首先在瀏覽器中加載頁面的情況下獲取HTML?
你可以做到這一點使用headless瀏覽器。
無頭瀏覽器是一個沒有圖形用戶界面的網頁瀏覽器。該程序的行爲與瀏覽器類似,但不會顯示任何GUI。
無頭的瀏覽器通常用於以下幾種情況: -
你有一箇中央構建工具,它沒有安裝任何瀏覽器。因此,爲了在每次構建之後進行基本的理智測試,您可以使用無頭瀏覽器來運行測試。
你想寫一個爬行程序,通過不同的頁面和收集數據,無頭瀏覽器將是您的選擇。因爲你真的不在乎打開瀏覽器。您所需要的只是訪問網頁。
您想在同一臺機器上模擬多個瀏覽器版本。在這種情況下,你會想使用無頭瀏覽器,因爲它們大多支持模擬不同版本的瀏覽器。我們很快就會談到這一點。
事情要注意使用無頭瀏覽器之前
無頭的瀏覽器是模擬程序,他們是不是你真正的瀏覽器。大多數這些無頭瀏覽器已經足夠模擬,像一個真正的瀏覽器一樣非常近似。您仍然不想在無頭瀏覽器中運行所有測試。在使用無頭瀏覽器之前,JavaScript是您想要非常小心的一個領域。 JavaScript由不同的瀏覽器實現。雖然JavaScript是一種標準,但每個瀏覽器在實現JavaScript方面都有自己的小差異。在無頭瀏覽器的情況下也是如此。例如HtmlUnit無頭瀏覽器使用Rihno JavaScript引擎,該引擎沒有被任何其他瀏覽器使用。
一些無頭的驅動程序的例子包括
的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();
}
}
}
代替? – mob41
如何在不加載它的情況下顯示html?唯一的想法,我可以推薦你是直接使用HTML請求。 –
你可以使用無頭瀏覽器... :) –