selenium自动化测试教程——java爬取数据

这篇具有很好参考价值的文章主要介绍了selenium自动化测试教程——java爬取数据。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、介绍

selenium 是一个用于自动化测试 Web 应用的工具集 ,它可以模拟用户自动去浏览器网页上进行点击、输入、选择下拉值复选框、鼠标移动、任意 JavaScript 执行等等操作。

selenium 有三个产品:

  • Selenium WebDriver:基于浏览器的回归自动化套件和测试,你可以使用 Java、Python、JavaScript、Ruby、JavaScript、C# 这些语言中的一种来编写代码,Selenium WebDriver 会根据代码去打开浏览器自动去网页上进行操作和测试。
  • Selenium IDE:selenium 开发的浏览器里的一款插件,它是界面化的操作,不用编写代码。如果你使用的谷歌浏览器你可以去谷歌插件应用商店搜索 Selenium IDE 进行安装和使用,它就像一个记录器一样,你可以在网页上进行点击、输入、跳转等操作,它会把你所有操作都记录下来,当你点击运行的时候它会把记录的操作自动化的操作一遍。Selenium IDE 的使用可以参考:Selenium IDE教程
  • Selenium Grid:通过在多台机器上分布式运行测试,可以从一个中心点管理多个环境,从而轻松针对大量浏览器/操作系统进行组合运行测试。

本文讲的是使用 Selenium WebDriver 通过 java 代码来自动对网页进行操作,推荐使用 Chrome 浏览器来操作。

二、下载浏览器驱动

1.获取要下载的驱动版本号

java selenium自动化 文档,java,selenium,自动化,java,自动化测试

Chrome 浏览器里查看你当前的版本,我这里是114.0.5735.134 ,丢弃最后一位数,得到 114.0.5735 ,然后拼接到https://chromedriver.storage.googleapis.com/LATEST_RELEASE_ 会得到一个链接,我得到的链接如下:

https://chromedriver.storage.googleapis.com/LATEST_RELEASE_114.0.5735

浏览器访问该链接会得到一个版本号

java selenium自动化 文档,java,selenium,自动化,java,自动化测试

我这里得到的是 114.0.5735.90 ,说明我应该要下载 114.0.5735.90 的驱动。

(关于版本选择可参考: Version Selection)

2.下载驱动

根据上面得到的版本号,去 ChromeDriver 下载 页面选择对应的谷歌浏览器版本号的驱动。

java selenium自动化 文档,java,selenium,自动化,java,自动化测试

然后根据你电脑的操作系统下载对应驱动并解压(我这里下载的是 windos 版的),解压后得到 chromedriver.exe。

java selenium自动化 文档,java,selenium,自动化,java,自动化测试

三、Maven如下

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

四、简单使用

下面的例子将会自动打开一个新的浏览器窗口,然后自动打开百度并自动搜索 “csdn 西凉的悲伤”,然后自动点击打开第一个搜索结果即我的博客主页,然后把抓取博客主页的文章目录和链接。

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.WebDriverWait;
import java.time.Duration;
import java.util.List;

import static org.openqa.selenium.support.ui.ExpectedConditions.numberOfWindowsToBe;
import static org.openqa.selenium.support.ui.ExpectedConditions.titleIs;


public class MainServer {
    public static void main(String[] args) {
        //加载 chromedriver 驱动
        System.setProperty("webdriver.chrome.driver", "D:\\Program\\chromedriver\\chromedriver.exe");
        //打开一个浏览器窗口
        WebDriver driver = new ChromeDriver();
        //打开百度链接
        driver.navigate().to("http://www.baidu.com/");
        //在搜索文本框输入"csdn 西凉的悲伤"
        driver.findElement(By.id("kw")).sendKeys("csdn 西凉的悲伤");
        //点击搜索按钮
        driver.findElement(By.id("su")).click();


        //存储当前原始窗口或页签的ID
        String originalWindow = driver.getWindowHandle();
        //获取当前打开的窗口或页签数
        int windosSize = driver.getWindowHandles().size();

        //等到百度搜索结果页面元素加载完(这里最多等5秒)
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(5));
        //点击第一条搜索结果,会打开新页签,也就是第2个页签
        driver.findElement(By.xpath("//*[@id='content_left']/div[@id='1']/div[@class='c-container']/div/h3/a")).click();


        WebDriverWait wait = new WebDriverWait(driver, Duration.ofMillis(10));
        //等待第2个新窗口或新页签打开
        wait.until(numberOfWindowsToBe(2));
        //循环指导找到新窗口或页签的句柄
        for (String windowHandle : driver.getWindowHandles()) {
            if(!originalWindow.contentEquals(windowHandle)) {
                //driver切换为新窗口或新页签的
                driver.switchTo().window(windowHandle);
                break;
            }
        }
        //等待新窗口或新页签的内容加载
        wait.until(titleIs("西凉的悲伤的博客_CSDN博客-java,工具,其他领域博主"));


        //读取当前页面标题
        System.out.println("当前网址的标题:"+driver.getTitle());
        //从地址栏中读取当前 URL
        System.out.println("当前网址的链接:"+driver.getCurrentUrl());
        System.out.println();

		//获取多个 h4 标签元素
        List<WebElement> articleTitles = driver.findElements(By.xpath("//*[@class='blog-list-box-top']/h4"));
        //获取多个 a 标签元素
        List<WebElement> articleUrls = driver.findElements(By.xpath("//*[@class='blog-list-box']/a"));
        for (int i = 0; i < articleTitles.size(); i++) {
        	//获取 h4 标签中的显示文本
            String articleTitle = articleTitles .get(i).getText();
            //获取 a 标签里的 href 属性的值
            String articleUrl = articleUrls.get(i).getAttribute("href");
            System.out.println("文章标题:"+articleTitle+" 链接:"+articleUrl);
        }
    }
}

效果如下:
java selenium自动化 文档,java,selenium,自动化,java,自动化测试

1.上面的代码使用了System.setProperty 来加载驱动,当然,你也可以把它配置到环境变量里就不用从代码里加载驱动了。你可以参考这篇文章来配置驱动的环境变量:selenium配置使用chromedriver。

2.上面的代码使用了 implicitlyWait 方法来显式等待页面加载完,然后再去查找第一条搜索结果并点击,如果不等页面加载完就查找会找不到并报错。除了显式等待,还有隐式等待、流利等待,你可参考官网的说明:selenium Waits 。或者你也可以使用 Thread.sleep(2000L); 来让线程等待 2 秒。

3.如果想不打开浏览器即不打开浏览器 GUI,只让程序在后台跑把数据加载到内存在内存操作输出结果(即无头浏览器),可以把上面第18行代码替换为如下:

        ChromeOptions options = new ChromeOptions();
        options.addArguments("--headless"); //无浏览器模式
        options.addArguments("--disable-gpu"); // 谷歌文档提到需要加上这个属性来规避bug
        WebDriver driver = new ChromeDriver(options);

五、定位器

网页上有很多元素按钮和文本等东西,比如:如果你想自动点击登录按钮,需要先找到登录按钮;如果你想点击某个链接需要先找到该链接才能点击。

1.定位器

帮我们找网页上的元素的这个东西就叫做定位器,上面的示例里使用了 xpath 定位器,不止 xpath 定位器,selenium 还为我们提供了其他定位器方便我们来查找元素,比如:通过 class 名称、通过 id 名称、通过网页上显示的文本、通过 html 标签的层级等。

定位器 描述
class name 根据class 的值来搜索匹配元素
css selector 根据 css 的值来搜索匹配元素
id 根据 id 属性的值来搜索匹配元素
name 根据 name 属性的值来搜索匹配元素
link text 根据链接显示的全部文本搜索匹配元素
partial link text 根据链接显示的部分文本搜索匹配元素
tag name 根据html标签名搜索匹配元素
xpath 根据元素的层级位置搜索匹配元素

2.说明

以以下 html 为例,对上面的定位器进行说明。

<html>
<body>
<style>
.information {
  background-color: white;
  color: black;
  padding: 10px;
}
</style>
<h2>Contact Selenium</h2>

<form action="/action_page.php">
  <input type="radio" name="gender" value="m" />Male &nbsp;
  <input type="radio" name="gender" value="f" />Female <br>
  <br>
  <label for="fname">First name:</label><br>
  <input class="information" type="text" id="fname" name="fname" value="Jane"><br><br>
  <label for="lname">Last name:</label><br>
  <input class="information" type="text" id="lname" name="lname" value="Doe"><br><br>
  <label for="newsletter">Newsletter:</label>
  <input type="checkbox" name="newsletter" value="1" /><br><br>
  <input type="submit" value="Submit">
</form> 

<p>To know more about Selenium, visit the official page 
<a href ="www.selenium.dev">Selenium Official Page</a> 
</p>

</body>
</html>

(1) class name 定位器

HTML 页面 Web 元素可以具有class属性,我们可以使用 Selenium 中可用的类名定位器来识别这些元素。

    WebDriver driver = new ChromeDriver();
	driver.findElement(By.className("information"));

(2) css selector 定位器

CSS 是用于设置 HTML 页面样式的语言。我们可以使用 css 选择器定位器策略来识别页面上的元素。如果元素有一个 id,我们创建定位器为 css = #id。否则我们遵循的格式是 css =[attribute=value] 。下面使用 css 为名字文本框创建定位器。

    WebDriver driver = new ChromeDriver();
	driver.findElement(By.cssSelector("#fname"));

(3) id 定位器

我们可以使用网页中元素可用的 ID 属性来定位它。通常,ID 属性对于网页上的元素应该是唯一的。

    WebDriver driver = new ChromeDriver();
	driver.findElement(By.id("lname"));

(4) name 定位器

我们可以使用网页中元素可用的 NAME 属性来定位它。通常 NAME 属性对于网页上的元素应该是唯一的。

    WebDriver driver = new ChromeDriver();
	driver.findElement(By.name("newsletter"));

(5) link text 定位器

如果我们要定位的元素是一个链接,我们可以使用链接文本定位器在网页上识别它。链接文本是链接显示的文本。

    WebDriver driver = new ChromeDriver();
	driver.findElement(By.linkText("Selenium Official Page"));

(6) partial link text 定位器

如果我们要定位的元素是一个链接,我们可以使用部分链接文本定位器在网页上识别它。链接文本是链接显示的文本。我们可以将部分文本作为值传递。

    WebDriver driver = new ChromeDriver();
	driver.findElement(By.partialLinkText("Official Page"));

(7) tag 定位器

我们可以使用 HTML TAG 本身作为定位器来识别页面上的 Web 元素。使用tag 定位器来定位“a”标签。

    WebDriver driver = new ChromeDriver();
	driver.findElement(By.tagName("a"));

(8) xpath 定位器

一个HTML文档可以看作是一个XML文档,然后我们就可以使用xpath来遍历到达感兴趣元素的路径来定位元素。XPath 可以是绝对 xpath,它是从文档的根目录创建的。示例 - /html/form/input[1]。这将返回男性单​​选按钮。或者 xpath 可能是相对的。示例: //输入[@name=‘fname’]。这将返回名字文本框。让我们使用 xpath 为女性单选按钮创建定位器。

    WebDriver driver = new ChromeDriver();
	driver.findElement(By.xpath("//input[@value='f']"));

关于 xpath 定位器你可以参考文章:
Selenium 中的 XPath
selenium 定位元素
XPath in Selenium: How to Find & Write
How to use XPath in Selenium

(9) Selenium IDE 插件辅助定位元素

如果你对 html 不熟悉或者用定位器来找网页元素不方便,你可以先使用本文介绍部分提到的 Selenium IDE 插件操作一遍,然后选择保存项目,它会把所有操作保存成一个 .side 后缀格式的文件,文件里面有每一步操作的描述,
并且每一步操作里面的 targets 生成了多种定位器,你代码里直接使用 targets 里的一种定位器去直接写就好了,就不用自己去分析网页编写定位器定位元素了。

java selenium自动化 文档,java,selenium,自动化,java,自动化测试

java selenium自动化 文档,java,selenium,自动化,java,自动化测试

(10) chrome浏览器开发控制台定位元素后复制Xpath

还有一种简单的方式。chrome 浏览器网页上右键检查(或 F12),点击左上角的箭头,然后点击网页上的元素进行定位,再定位后的代码上右键复制里选择复制 XPath , 你就可以很方便的在代码里使用 xpath 定位器了。

java selenium自动化 文档,java,selenium,自动化,java,自动化测试

java selenium自动化 文档,java,selenium,自动化,java,自动化测试

六、常见操作

1.打开一个新的浏览器页签

//打开一个新的浏览器页签
driver.switchTo().newWindow(WindowType.TAB);

2.打开网址链接

//方便的方式
driver.get("http://www.baidu.com");
//或者下面的方式,是一样的效果
driver.navigate().to("http://www.baidu.com");

3.获取当前网页的标题和链接

//读取当前页面标题
driver.getTitle();
//从地址栏中读取当前 URL
driver.getCurrentUrl();

4.浏览器前进、后退、刷新、关闭

//浏览器的后退
driver.navigate().back();
//浏览器的前进
driver.navigate().forward();
//浏览器的刷新
driver.navigate().refresh();
//关闭浏览器
driver.quit();

5.弹窗的警告、确认

(1)获取警告弹窗的文本并点击确认

//使用link text定位器找到页面链接,并点击它来出发弹窗 
driver.findElement(By.linkText("See an example alert")).click();
//等弹窗显示并获取弹窗对象
Alert alert = wait.until(ExpectedConditions.alertIsPresent());
//获取弹窗的文本内容
String text = alert.getText();
//点击弹窗的确认按钮
alert.accept();

(2)确认弹窗类似于警告弹窗,除了用户还可以选择取消消息。
此示例还展示了另一种获取弹窗对象的方法:

//使用link text定位器找到链接,并点击它来出发弹窗 
driver.findElement(By.linkText("See a sample confirm")).click();
//等弹窗显示
wait.until(ExpectedConditions.alertIsPresent());
//获取弹窗对象
Alert alert = driver.switchTo().alert();
//获取弹窗的文本内容
String text = alert.getText();
//点击弹窗的取消按钮
alert.dismiss();

(3)可输入的弹窗
提示类似于确认弹窗,可输入的弹窗还可以输入一些文本信息,与使用表单元素类似。

//使用link text定位器找到链接,并点击它来出发弹窗 
driver.findElement(By.linkText("See a sample prompt")).click();
//等弹窗显示并获取弹窗对象
Alert alert = wait.until(ExpectedConditions.alertIsPresent());
//在弹窗的输入框输入“你好啊”
alert.sendKeys("你好啊");
//按确定按钮
alert.accept();

6.判断页面的元素是否存在

int headImage = driver.findElements(By.xpath("//*[@class='user_avatar']")).size();
if (headImage == 0) {
 	System.out.println("页面上 class 为 user_avatar 的 html 元素不存在");
}

7.在已打开的浏览器打开网址链接

默认的如果你使用 selenium 进行操作,selenium 会打开一个新的浏览器窗口然后再打开链接,并且这个新打开的浏览器窗口是没有插件 的(即使你浏览器里安装了插件)。那如何在已经打开的浏览器里打开链接呢?

(1)先关闭你的浏览器

(2)找到你浏览器的启动目录
选择浏览器图标,右键选择属性,点击打开文件所在的位置,然后复制该文件夹路径。

(3)新建个叫 chromeStart 的 txt 文件,内容如下,把下面第一行的路径替换成你上面复制的文件夹路径,然后保存

cd C:\Program Files\Google\Chrome\Application
start chrome.exe --flag-switches-begin --flag-switches-end --remote-debugging-port=9222

(4)把上面的 chromeStart.txt 文件后缀改为 bat 然后双击 chromeStart.bat 会打开浏览器

(5) selenium 代码要如下

        //加载 chromedriver 驱动
        System.setProperty("webdriver.chrome.driver", "D:\\Program\\chromedriver\\chromedriver.exe");

        //使用已经打开的浏览器窗口
        ChromeOptions options = new ChromeOptions();
        options.setExperimentalOption("debuggerAddress", "127.0.0.1:9222");
        WebDriver driver = new ChromeDriver(options);
        //打开一个新的页签
        driver.switchTo().newWindow(WindowType.TAB);
        //打开链接
        driver.navigate().to("https://www.baidu.com");

七、使用 cookie

1.添加cookie

public static void main(String[] args) {
        WebDriver driver = new ChromeDriver();
        try {
        	//打开网址
            driver.get("http://www.example.com");
            //添加cookie到当前浏览器网址的上下文中
            driver.manage().addCookie(new Cookie("key", "value"));
        } finally {
        	//关闭浏览器
            driver.quit();
        }
}

2.获取与删除 Cookie

(1)获取指定 Cookie

public static void main(String[] args) {
       WebDriver driver = new ChromeDriver();
        try {
            driver.get("http://www.example.com");
            //设置一个Cookie
            driver.manage().addCookie(new Cookie("login", "fgflkshf&"));
            // 获取key是 'login'的Cookie
            Cookie cookie1 = driver.manage().getCookieNamed("login");
            System.out.println(cookie1);
        } finally {
            driver.quit();
        }
}

(2)获取所有 Cookie

		Set<Cookie> cookies = driver.manage().getCookies();

(3)删除指定 Cookie

 		driver.manage().deleteCookieNamed("login");

(4)删除所有 Cookie

		driver.manage().deleteAllCookies();

八、键盘与鼠标操作

键盘与鼠标操作可参考官网说明:

1.键盘操作说明

2.鼠标操作说明

3.滚轮操作说明


参考:
Java-Selenium自动化教程(学了不亏)
JAVA使用selenium的常见爬虫操作
Selenium with Python
Selenium WebDriver
selenium 使用使用已经打开的浏览器文章来源地址https://www.toymoban.com/news/detail-634554.html

到了这里,关于selenium自动化测试教程——java爬取数据的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【自动化测试】Java+Selenium自动化测试环境搭建

    本主要介绍以Java为基础,搭建Selenium自动化测试环境,并且实现代码编写的过程。 1.Selenium介绍 Selenium 1.0 包含 core、IDE、RC、grid 四部分,selenium 2.0 则是在两位大牛偶遇相互沟通决定把面向对象结构化(OOPP)和便于编写代码的各自思想予以整合后形成的新工具,也就是我们所

    2024年02月11日
    浏览(53)
  • 8.测试教程-自动化测试selenium-3

    大家好,我是晓星航。今天为大家带来的是 自动化测试selenium第三节 相关的讲解!😀 unittest 是python 的单元测试框架,它主要有以下作用: **提供用例组织与执行:**当你的测试用例只有几条时,可以不必考虑用例的组织,但是,当测试用例达到 成百上千条时,大量的测试用

    2024年03月23日
    浏览(42)
  • 7.测试教程-自动化测试selenium-2

    大家好,我是晓星航。今天为大家带来的是 自动化测试selenium第二节 相关的讲解!😀 一个简单自动化脚本的构成: 脚本解析 coding = utf-8 防止乱码,在编辑器里面可以不用加,因为编辑器默认的就是UTF-8模式。 from selenium import webdriver 导入webdriver工具包,这样就可以使用里面

    2024年03月20日
    浏览(42)
  • 使用Selenium和bs4进行Web数据爬取和自动化(爬取掘金首页文章列表)

    2024软件测试面试刷题,这个小程序(永久刷题),靠它快速找到工作了!(刷题APP的天花板)_软件测试刷题小程序-CSDN博客 文章浏览阅读2.9k次,点赞85次,收藏12次。你知不知道有这么一个软件测试面试的刷题小程序。里面包含了面试常问的软件测试基础题,web自动化测试、

    2024年03月18日
    浏览(62)
  • Python+Selenium自动化测试详细教程

       Python Selenium是Selenium WebDriver的Python语言封装,为Python开发者提供了一个方便易用的自动化测试库。它支持多种浏览器(如Chrome、Firefox、Edge等)以及多个操作系统,可以模拟用户在浏览器中的各种行为,包括打开网页、查找元素、输入文本、点击链接、提交表单、上传文

    2023年04月18日
    浏览(51)
  • 自动化测试:Selenium原理及安装教程

    目录 一、客户端和驱动(环境)安装 1、安装客户端库 2、安装浏览器和驱动 二、简单示例(Python自动化开发) 省略浏览器驱动路径 三、常见问题 关闭 chromedriver 日志 浏览器首页显示防病毒重置设置 扩展知识 Selenium 是一套 Web网站 的程序自动化操作 解决方案。 通过它,我

    2024年02月09日
    浏览(55)
  • 【自动化测试】——Selenium (基于java)

    小亭子正在努力的学习编程,接下来将开启软件测试的学习~~ 分享的文章都是学习的笔记和感悟,如有不妥之处希望大佬们批评指正~~ 同时如果本文对你有帮助的话,烦请点赞关注支持一波, 感激不尽~~ 目录 一、认识Selenium 1.什么是自动化测试  2.Selenium  3.webdriver的工作原理

    2024年02月15日
    浏览(47)
  • Selenium自动化测试(基于Java)

    目录 一. 了解Selenium ✅1.1 概念 ✅1.2 作用 ✅1.3 特点 ✅1.4 工作原理  二. Selenium + Java 环境搭建 ✅2.1 下载 Chrome 浏览器 ✅2.2 查看浏览器的版本 ✅2.3 下载浏览器驱动 ✅2.4 验证环境是否搭建成功 三. Selenium 常用 API ✅3.1 定位元素 ✅3.2 操作对象 ✅3.3 添加等待 ✅3.4 打印信息

    2024年02月06日
    浏览(92)
  • Selenium教程:自动化浏览器测试工具

    Selenium是一款用于自动化浏览器测试的工具,它提供了一系列的API和功能,使得开发人员可以编写脚本来模拟用户在浏览器中的行为。无论是在Web应用程序的功能测试、性能测试还是数据抓取方面,Selenium都是一个强大且广泛使用的工具。 在开始使用Selenium之前,您需要进行安

    2024年02月07日
    浏览(81)
  • Python_Selenium自动化测试详细教程

       Python Selenium是Selenium WebDriver的Python语言封装,为Python开发者提供了一个方便易用的自动化测试库。它支持多种浏览器(如Chrome、Firefox、Edge等)以及多个操作系统,可以模拟用户在浏览器中的各种行为,包括打开网页、查找元素、输入文本、点击链接、提交表单、上传文

    2024年02月11日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包