码迷,mamicode.com
首页 > Web开发 > 详细

使用selenium抓取JS动态生成的页面

时间:2015-07-31 20:21:44      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:selenium   浏览器   javascript   

在抓取网页数据时,传统jsoup方案只能对静态页面有效,而有些网页数据往往是js生成的,所以这时候需要其它的方案。
首先的思路是分析js程序,对js的请求进行再次抓取,这适合于特定的页面抓取,要做到对不同目标URL的通用性,比较麻烦。
第二种思路,也是比较成熟的做法是利用第三方的驱动渲染页面,然后下载。这里介绍一下第二种实现思路。

Selenium一个模拟浏览器的自动化测试工具,它提供一组API可以与真实的浏览器内核交互。

Java环境下的maven配置如下:

<dependency>
   <groupId>org.seleniumhq.selenium</groupId>
   <artifactId>selenium-java</artifactId>
   <version>2.46.0</version>
  </dependency>

第三方驱动主要有IEDriver,FirefoxDriver,ChromeDriver,HtmlUnitDriver。
htmlUnit也是一种自动化测试的工具。可以用HtmlUnit模拟浏览器运行,获得执行后的html页面。其中HtmlUnitDriver是对htmlUnit的封装。
因为htmlunit对js解析的支持有限,在实际工程中并不常用。
以chrome为例下载对应的驱http://code.google.com/p/chromedriver/downloads/list 。
下载driver时需要注意与selenium的版本兼容,可能出现异常情况,一般下载最新版本就好。
程序运行前一定要制定驱动位置,比如在Windows下面
System.getProperties().setProperty("webdriver.chrome.driver",
        "D:\\chromedriver\\chromedriver.exe");

获取整个页面

 public static void testChromeDriver() {
System.getProperties().setProperty("webdriver.chrome.driver",
        "D:\\chromedriver\\chromedriver.exe");
WebDriver webDriver = new ChromeDriver();
webDriver.get("http://picture.youth.cn/qtdb/201506/t20150625_6789707.htm");
String responseBody = webDriver.getPageSource();
System.out.println(responseBody);
webDriver.close();
}
获取新浪评论数

public static void waitForSomthing(){
System.getProperties().setProperty("webdriver.chrome.driver",
        "D:\\chromedriver\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.get("http://news.sina.com.cn/c/2015-07-04/023532071740.shtml");
        WebDriverWait wait = new WebDriverWait(driver,10);  
        wait.until(new ExpectedCondition<Boolean>() {
            public Boolean apply(WebDriver webDriver) {
                System.out.println("Searching ...");
                return webDriver.findElement(By.id("commentCount1")).getText().length() != 0;
            }
        });
          
        WebElement element = driver.findElement(By.id("commentCount1"));  
        System.out.println("element="+element.getText());
}

关于selenium的更多api及介绍:http://docs.seleniumhq.org/docs/
一些driver的测试报告:http://my.oschina.net/xxjbs001/blog/396564


版权声明:本文为博主原创文章,未经博主允许不得转载。

使用selenium抓取JS动态生成的页面

标签:selenium   浏览器   javascript   

原文地址:http://blog.csdn.net/lgcssx/article/details/47174565

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!