[英]How can I download a complete webpage with java without having “ ” replace parts of the HTML code?
[英]Java Selenium: how can I get the HTML of a webpage without first loading the page?
使用Selenium WebDriver for Java,是否可以獲取給定指定URL的網頁的HTML?
我知道,一旦在瀏覽器中加載網頁,就可以使用WebDriver.getPageSource()獲取HTML。 但是,為了提高效率,是否可以在不首先在瀏覽器中加載頁面的情況下獲取HTML?
您可以使用無頭瀏覽器實現此目的。
無頭瀏覽器是沒有圖形用戶界面的Web瀏覽器。 該程序的行為與瀏覽器類似,但不會顯示任何GUI。
無頭瀏覽器通常用於以下情況: -
你有一個中央構建工具,它沒有安裝任何瀏覽器。 因此,要在每次構建之后進行基本級別的健全性測試,您可以使用無頭瀏覽器來運行測試。
您想編寫一個遍歷不同頁面並收集數據的爬蟲程序,無頭瀏覽器將是您的選擇。 因為你真的不在乎打開瀏覽器。 您只需訪問網頁即可。
您希望在同一台計算機上模擬多個瀏覽器版本。 在這種情況下,您可能希望使用無頭瀏覽器,因為它們中的大多數都支持模擬不同版本的瀏覽器。 我們很快就會到這一步。
使用無頭瀏覽器之前要注意的事項
無頭瀏覽器是模擬程序,它們不是真正的瀏覽器。 大多數這些無頭瀏覽器已經發展到足以模擬,非常接近,就像真正的瀏覽器一樣。 你仍然不想在無頭瀏覽器中運行所有測試。 在使用Headless瀏覽器之前,JavaScript是您需要非常小心的一個領域。 JavaScript由不同的瀏覽器實現。 盡管JavaScript是一種標准,但每個瀏覽器在實現JavaScript方面都有其自身的微小差異。 對於無頭瀏覽器也是如此。 例如,HtmlUnit無頭瀏覽器使用Rihno JavaScript引擎,該引擎未被任何其他瀏覽器使用。
無頭驅動器的一些例子包括
JAVA中的httpRequest:
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();
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.