使用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请求。 –
你可以使用无头浏览器... :) –