2016-07-24 53 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(); 
    } 
    } 
} 
相关问题