java爬虫的selenium基础使用

实用博客  selenium java教程

 

具体项目运用

 

项目背景:西安市人民政府网站上获取到县区新闻,从下图可以看出“区县热点”是需要在页面中进行点击的,这里页面使用的是javascript的函数,无法获取到具体的链接,必须使用selenium进行模拟点击操作。

同样,在区县热点中点击下一页也是需要模拟点击的。

 

代码实现:

 

首先第一部分是建立好一个WebDriver,用以模拟点击等一系列的操作

private static long waitLoadBaseTime = 2000;
private static int waitLoadRandomTime = 2000;
private static Random random = new Random(System.currentTimeMillis());
public static WebDriver getDriver(String url_web) {
    try {
       // 等待数据加载的时间
       // 为了防止服务器封锁,这里的时间要模拟人的行为,随机且不能太短
//      long waitLoadBaseTime = 2000;
//      int waitLoadRandomTime = 2000;
//      Random random = new Random(System.currentTimeMillis());
       // 设置 chrome 的路径,直接放在chrome的安装路径即可
       String chrome = "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe";
       System.setProperty("webdriver.chrome.driver", chrome);
       ChromeOptions options = new ChromeOptions();
       // 通过配置参数禁止data;的出现
       options.addArguments(
         "--user-data-dir=C:/Users/Administrator/AppData/Local/Google/Chrome/User Data/Default");
    
        // 通过配置参数删除“您使用的是不受支持的命令行标记:--ignore-certificate-errors。稳定性和安全性会有所下降。”提示
        options.addArguments("--start-maximized", "allow-running-insecure-content", "--test-type");
        options.addArguments("--profile-directory=Default");
    
// userdata 设置使用chrome的默认参数 options.addArguments("--user-data-dir=C:/Temp/ChromeProfile"); //也可以只用自己配置的chrom 设置地址:如下 // options.addArguments("--user-data-dir=C:/Users/ZHL/AppData/Local/Google/Chrome/User Data"); // 创建一个 Chrome 的浏览器实例 WebDriver driver = new ChromeDriver(options); // 让浏览器访问微博主页 driver.get(url_web); // 等待页面动态加载完毕 Thread.sleep(waitLoadBaseTime+random.nextInt(waitLoadRandomTime)); return driver; } catch (Exception e) { e.printStackTrace(); return null; } }

 

 

然后就是具体的操作

public static void main(String[] args) throws Exception {
       
        WebDriver dr = getDriver("http://www.xa.gov.cn/ptl/def/def/index_1121_6899_ci_trid_4305611-levNo_1-sortNo_0.html");
        Actions action = new Actions(dr);
        action.moveToElement(dr.findElement(By.id("div-c2-3"))).click().build().perform();        // 模拟点击
        // 点击后要等待网页加载一段时间,然后才是最新的网页源码
        Thread.sleep(18000);
        System.out.println(dr.findElement(By.className("color-green")).getText());
        List<WebElement> newsUrl = dr.findElements(By.cssSelector("li[class='col-md-10 padding-0']"));
        System.out.println("newsUrl" + newsUrl.size());
        for(WebElement e: newsUrl) {
            String title = e.findElement(By.tagName("a")).getText();
            String url = e.findElement(By.tagName("a")).getAttribute("href");
            System.out.println("title:" + title);
            System.out.println("url:" + url);
        }
        System.out.println(dr.findElement(By.className("color-green")).getText());
        System.out.println(dr.findElement(By.id("div-c2-3")).getAttribute("onclick"));
    }

 

posted @ 2018-07-20 15:21  潘_磊  阅读(1727)  评论(0编辑  收藏  举报