Java + Selenium + Chrome抓取页面元素(支持Linux环境和Windows环境)

1 篇文章 0 订阅
1 篇文章 0 订阅

前言

尝试过Htmlunit和PhantomJS都无法抓取JS动态生成的页面,这两种方式实际抓取的都是原页面并不是js渲染之后的页面,后来经过尝试终于确定 Selenium + Chrome的方式能抓取js渲染之后的界面,其中也有不少坑,在这里记录一下。

一、下载chromedriver

chromedriver和谷歌版本需要严格对应
下载地址chromedriver
根据谷歌版本下载对应的chromedriver

依赖,高版本的selenium依赖只需要第一个,不用第二个依赖,但经过尝试 ,高版本的依赖可能会出现问题

<!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java -->
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>3.11.0</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>24.1-jre</version>
        </dependency>

代码

public class webdriver {
    public static void main(String[] args){
        System.getProperties().setProperty("webdriver.chrome.driver",
                "D:\\web_driver\\chromedriver.exe");
        ChromeOptions options = new ChromeOptions();
        // 无界面参数,使用后不会打开浏览器,linuxx环境必须加入
        options.addArguments("--headless");
        //禁用沙盒
        options.addArguments("--no-sandbox");
        options.addArguments("--disable-gpu");
        options.addArguments("--disable-dev-shm-usage");
        WebDriver webDriver = new ChromeDriver(options);
//        webDriver.manage().window().maximize();
        webDriver.get("https://www.baidu.com/");
       try {
            Thread.sleep(10000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(webDriver.getPageSource());
        webDriver.close();

    }

}

有一块代码相当重要

try {
     Thread.sleep(10000);
 } catch (InterruptedException e) {
     e.printStackTrace();
 }

没有这段代码获取到的页面是未渲染的页面

二、linux环境

linux环境:centos7+,内核版本 _x86
centos7以下版本装不上chrome,linux内核为aarch64也装不上

查看linux内核版本
uname -a

安装chrome

配置chrome yum下载源:
在目录 /etc/yum.repos.d/ 下新建文件 google-chrome.repo

touch google-chrome.repo

在google-chrome.repo添加内容

#编辑google-chrome.repo
vi /etc/yum.repos.d/google-chrome.repo
#添加内容
[google-chrome]
name=google-chrome
baseurl=http://dl.google.com/linux/chrome/rpm/stable/$basearch
enabled=1
gpgcheck=1
gpgkey=https://dl-ssl.google.com/linux/linux_signing_key.pub

安装chrome

yum -y install google-chrome-stable --nogpgcheck

linux环境对不上的可能会报缺少依赖的错误
安装目录在/usr/bin/下

查看安装的chrome版本

/usr/bin/google-chrome -version

安装chromedriver
根据上面的chromedriver链接查看对应的chromedriver下载地址

#使用wget命令下载,这是85.0.4183版本谷歌对应的 driver
wget https://cdn.npm.taobao.org/dist/chromedriver/85.0.4183.87/chromedriver_linux64.zip
#使用unzip 命令解压
unzip chromedriver_linux64.zip
#将chromedriver 移至/usr/bin目录
mv chromedriver /usr/bin/chromedriver
#赋予权限
chomod 777 chromedriver

完成

!!!注意

上面的代码不能直接在liunx环境用,实用上面的代码只能获取到为渲染的页面
要获取到渲染后的页面必须在

webDriver.get("https://www.baidu.com/");

这段代码前加上

try {
  Thread.sleep(10000);
} catch (InterruptedException e) {
   e.printStackTrace();
}

完成

欢迎访问我的个人博客

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java+Selenium中,我们可以使用断言来验证页面元素是否存在或者是否具有特定的属性值。以下是一些常见的页面元素断言方法: 1. 验证元素是否存在:我们可以使用`findElement`方法来查找元素,如果元素存在,则会返回一个WebElement对象,然后使用`assertNotNull`方法来验证该对象是否为空,如果不为空,则说明元素存在。 ``` WebElement element = driver.findElement(By.id("elementId")); assertNotNull(element); ``` 2. 验证元素文本内容:我们可以使用`getText`方法来获取元素的文本内容,然后使用`assertEquals`方法来验证文本是否和预期的一致。 ``` WebElement element = driver.findElement(By.id("elementId")); String actualText = element.getText(); String expectedText = "Hello World!"; assertEquals(expectedText, actualText); ``` 3. 验证元素属性值:我们可以使用`getAttribute`方法来获取元素的属性值,然后使用`assertEquals`方法来验证属性值是否和预期的一致。 ``` WebElement element = driver.findElement(By.id("elementId")); String actualValue = element.getAttribute("value"); String expectedValue = "123456"; assertEquals(expectedValue, actualValue); ``` 4. 验证元素是否可见:我们可以使用`isDisplayed`方法来验证元素是否可见,如果元素可见,则返回true,否则返回false。 ``` WebElement element = driver.findElement(By.id("elementId")); assertTrue(element.isDisplayed()); ``` 这些方法只是Java+Selenium中常用的一些页面元素断言方法,根据实际情况,我们还可以使用其他的断言方法来验证页面元素

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值