• 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"));
        }
  • 相关阅读:
    firefox禁止更新提示
    laravel性能优化笔记片段
    laravel 7 在线教育项目实操笔记(2)后台基础功能开发
    一、笔记片段 迁移文件相关(创建表 字段 添加假数据等)
    路由、控制器笔记
    laravel rbac笔记片段
    二 笔记片段
    三 文件上传片段
    分享5个有趣的 JavaScript 代码片段
    异步上传文件
  • 原文地址:https://www.cnblogs.com/panlei3707/p/9341660.html
Copyright © 2020-2023  润新知