selenium-java自动化教程

文章目录

    • Selenium
      • 支持语言
      • WebDriver
    • 开始使用
      • chromedriver
      • 模拟用户浏览访问
      • 模拟点击事件
        • 关闭弹窗,选中元素并点击
      • 获取页面文本
      • 结语

Selenium

 Selenium是一个自动化测试工具,可以模拟用户操作web端浏览器的行为,包括点击、输入、选择等。也可以获取交互界面上的指定元素的内的数据,也就是爬虫。

支持语言

  Selenium支持Java、Python、CSharp、Ruby、JavaScript、Kotlin,对于会java语言的,可以直接使用selenium-java

WebDriver

 Selenium 的核心是 WebDriver,这是一个编写指令集的接口,可以在许多浏览器运行。我们要在浏览器中模拟用户点击就需要一个对应的驱动组件来实现这个功能,WebDriver就是以原生的方式驱动浏览器,就像用户在本地操作浏览器一样。
在这里插入图片描述

开始使用

chromedriver

 上边说了我们要驱动浏览器做一些行为动作就需要一个对应的驱动,目前支持的浏览器有:Firefox、Chrome、Edge、IE、Apple Safari,下面我们使用Chrome浏览器
chromedriver
chromedriver125.0.6422.141稳定版
我使用的浏览器版本是125.0.6422.142,小版本差别影响不大 可以直接使用,下载的WebDriver如果版本差别太大启动的时候会提示浏览器版本不支持。

在这里插入图片描述

模拟用户浏览访问

 以模拟用户浏览页面,不断的滚动页面直到最底部这样一个需求,下面开始编码

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.6.0</version></dependency><dependency><groupId>org.seleniumhq.selenium</groupId><artifactId>selenium-java</artifactId><version>3.141.59</version></dependency>
</dependencies>
@Component
public class BlogService {private final List<String> UA_LIST = Arrays.asList("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.0.0 Safari/537.36","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.0.0 Safari/537.36","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.0.0 Safari/537.36","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.0.0 Safari/537.36","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.0.0 Safari/537.36","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.0.0 Safari/537.36", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.0.0 Safari/537.36");// 要访问的页面地址private final List<String> URL_LIST = Arrays.asList("https://wiki.mbalib.com/wiki/%E7%BB%B4%E5%9F%BA%E7%99%BE%E7%A7%91");private final AtomicInteger count = new AtomicInteger();public static void main(String[] args) {// websiteTask();}private void websiteTask() {System.setProperty(FirefoxDriver.SystemProperty.BROWSER_LOGFILE, "/dev/null");// driver驱动下载地址:https://googlechromelabs.github.io/chrome-for-testing/System.setProperty("webdriver.chrome.driver", "src\\main\\resources\\125\\chromedriver.exe");   //设置chrome驱动程序的路径System.out.println(System.getProperty("webdriver.chrome.driver"));ChromeOptions opt = new ChromeOptions();//opt.addArguments("-headless");     // 开启无界面模式opt.addArguments("--disable-gpu");  // 禁用gpuopt.addArguments("--user-agent=" + getRandom(UA_LIST));WebDriver driver = new ChromeDriver(opt);   //初始化一个chrome驱动实例,保存到driver中try {// driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS); //隐式等待10秒//最大化窗口driver.manage().window().maximize();  //最大化窗口driver.get(getRandom(URL_LIST));Thread.sleep(1000);  // 等待页面加载xs// 强制转换WebDriver为JavascriptExecutorJavascriptExecutor jsExecutor = (JavascriptExecutor) driver;// 执行JavaScript代码来获取页面的滚动条高度int scrollHeight = Integer.parseInt(jsExecutor.executeScript("return document.documentElement.scrollHeight;").toString());// 可以根据滚动条高度,每次滚动多少px,计算出总共需要滚动多少次,这样就可以滚动到最底部int num = scrollHeight / 400;for (int i = 0; i < num; i++) {int height = (i + 1) * 400;((JavascriptExecutor) driver).executeScript("window.scrollTo({" + "top: " + height + ",behavior: \"smooth\"" + "})");Thread.sleep(1000);  // 每次滚动等待一定时间}} catch (Exception e) {e.printStackTrace();} finally {driver.manage().deleteAllCookies();System.out.println("当前第几次:" + count.incrementAndGet() + " , 打开页面的标题是: " + driver.getTitle());//关闭并退出浏览器driver.quit();}}/*** 随机获取一个地址*/private String getRandom(List<String> list) {// shuffle 打乱顺序Collections.shuffle(list);return list.get(0);}// initialDelay:第一次延迟多长时间后再执行, fixedRate:之后按fixedRate的规则每x秒执行一次@Scheduled(initialDelay = 0, fixedRate = 13000)public void timingTask() {System.out.println("start task........");websiteTask();}
}

运行效果:

selenium-java模拟浏览页面

模拟点击事件

使用这个网站作为示例:测试页面

在这里插入图片描述

由于打开页面有一个提示框,需要先把提示框关闭后才可以对页面元素进行操作,否则会提示元素是不可点击的。
所以我们的步骤是:先打开页面 选中弹窗右上角的关闭图标点击它,然后才能选择页面上要操作的元素。

关闭弹窗,选中元素并点击

 使用xpath语法和浏览器插件可以非常方便的选中要操作的元素,然后在代码中获取到这个元素并调用它的点击事件

@Component
public class BlogService {private final List<String> UA_LIST = Arrays.asList("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.0.0 Safari/537.36","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.0.0 Safari/537.36","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.0.0 Safari/537.36","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.0.0 Safari/537.36","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.0.0 Safari/537.36","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.0.0 Safari/537.36", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.0.0 Safari/537.36");// 要访问的页面地址private final List<String> URL_LIST = Arrays.asList("https://wiki.mbalib.com/wiki/%E7%BB%B4%E5%9F%BA%E7%99%BE%E7%A7%91");private final AtomicInteger count = new AtomicInteger();public static void main(String[] args) {// websiteTask();}private void websiteTask() {System.setProperty(FirefoxDriver.SystemProperty.BROWSER_LOGFILE, "/dev/null");// driver驱动下载地址:https://googlechromelabs.github.io/chrome-for-testing/System.setProperty("webdriver.chrome.driver", "src\\main\\resources\\125\\chromedriver.exe");   //设置chrome驱动程序的路径System.out.println(System.getProperty("webdriver.chrome.driver"));ChromeOptions opt = new ChromeOptions();//opt.addArguments("-headless");     // 开启无界面模式opt.addArguments("--disable-gpu");  // 禁用gpuopt.addArguments("--user-agent=" + getRandom(UA_LIST));WebDriver driver = new ChromeDriver(opt);   //初始化一个chrome驱动实例,保存到driver中try {// driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS); //隐式等待10秒//最大化窗口driver.manage().window().maximize();  //最大化窗口driver.get(getRandom(URL_LIST));Thread.sleep(1000);  // 等待页面加载xs// 先关闭弹窗String headExpression = "//div[@class=\"bg hid\" and @id=\"vip_popup_img\"]//*[local-name() = \"svg\" and @class=\"head-icon\"]";WebElement headElement = driver.findElement(By.xpath(headExpression));headElement.click();//再操作页面元素String xpathExpression = "//div[@id=\"globalWrapper\"]/div[@id=\"column-content\"]/div[3]/div[@id=\"bodyContent\"]/dl[1]//a[3]";WebElement element = driver.findElement(By.xpath(xpathExpression));// 模拟点击事件element.click();Thread.sleep(10000);} catch (Exception e) {e.printStackTrace();} finally {driver.manage().deleteAllCookies();System.out.println("当前第几次:" + count.incrementAndGet() + " , 打开页面的标题是: " + driver.getTitle());//关闭并退出浏览器driver.quit();}}/*** 随机获取一个地址*/private String getRandom(List<String> list) {// shuffle 打乱顺序Collections.shuffle(list);return list.get(0);}// initialDelay:第一次延迟多长时间后再执行, fixedRate:之后按fixedRate的规则每x秒执行一次@Scheduled(initialDelay = 0, fixedRate = 13000)public void timingTask() {System.out.println("start task........");websiteTask();}
}

运行效果:

selenium-java模拟点击按钮事件

获取页面文本

 如果页面有很多文本文字,要获取(paqu)页面的文字内容也非常的简单
在这里插入图片描述

String xpathExpression = "//div[@id=\"content\"]/div[@id=\"bodyContent\"]//p[1]";
WebElement element = driver.findElement(By.xpath(xpathExpression));
System.out.println(element.getText());

结语

 xpath语法网络上很多资料这里就不做具体介绍了,主要说一下paqu数据的主要步骤,通过xpath可以获取到指定元素的文本内容、模拟元素的点击事件,这样我们就可以实现paqu网页数据,如果页面有分页的话也可以通过编写代码的方式获取到所有数据

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/349343.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI数字人的开源解决方案

目前&#xff0c;国内外已经涌现出一些优秀的数字人开源解决方案&#xff0c;这些解决方案为开发者提供了构建数字人应用的工具和基础设施。以下是一些比较知名的数字人开源解决方案。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1…

个人商业模式画布 | 10分钟+6张图,帮你重新定位个人发展!

在个性化的时代浪潮中&#xff0c;构建个人IP成为了提升个人影响力的黄金通道。之前分享过企业的商业模式画布&#xff0c;很受大家喜欢&#xff0c;今天我们分享个人商业模式画布&#xff0c;它适用于个人发展&#xff0c;可以帮助你有效地打造个人品牌&#xff0c;重塑你的职…

Unity Protobuf+RPC+UniTask

远程过程调用&#xff08;RPC&#xff09;协议详解 什么是RPC协议RPC的基本原理RPC的关键组件RPC的优缺点Protobuf函数绑定CallEncodeRecvDecodeSocket.Send和Recv项目地址 什么是RPC协议 远程过程调用&#xff08;Remote Procedure Call&#xff0c;简称RPC&#xff09;是一种…

分布式高性能计算 (HPC)的工作负载管理平台和作业调度程序—— IBM Spectrum® LSF® Suites

IBM Spectrum LSF Suites 是面向分布式高性能计算 (HPC) 的工作负载管理平台和作业调度程序。基于 Terraform 的自动化现已可用&#xff0c;该功能可在 IBM Cloud 上为基于 IBM Spectrum LSF 的集群供应和配置资源。 借助我们针对任务关键型 HPC 环境的集成解决方案&#xff0…

CentOS7 配置Nginx域名HTTPS

Configuring Nginx with HTTPS on CentOS 7 involves similar steps to the ones for Ubuntu, but with some variations in package management and service control. Here’s a step-by-step guide for CentOS 7: Prerequisites Domain Name: “www.xxx.com”Nginx Install…

农业领域科技查新点提炼方法附案例!

农业学科是人类通过改造和利用生物有机体(植物、动物、微生物等)及各种自然资源(光、热、水、土壤等)生产出人类需求的农产品的过程&#xff0c;人类在这一过程中所积累的科学原理、技术、工艺和技能&#xff0c;统称为农业科学技术&#xff0c;该领域具有研究范围广、综合性强…

沉睡而且“狡猾”的特工:大模型也可以是!

大模型技术论文不断&#xff0c;每个月总会新增上千篇。本专栏精选论文重点解读&#xff0c;主题还是围绕着行业实践和工程量产。若在某个环节出现卡点&#xff0c;可以回到大模型必备腔调或者LLM背后的基础模型新阅读。而最新科技&#xff08;Mamba,xLSTM,KAN&#xff09;则提…

VMware ESXi 8.0U2c macOS Unlocker OEM BIOS ConnectX-3 网卡定制版 (集成驱动版)

VMware ESXi 8.0U2c macOS Unlocker & OEM BIOS ConnectX-3 网卡定制版 (集成驱动版) 发布 ESXi 8.0U2 集成驱动版&#xff0c;在个人电脑上运行企业级工作负载 请访问原文链接&#xff1a;https://sysin.org/blog/vmware-esxi-8-u2-sysin/&#xff0c;查看最新版。原创作…

【Da-SimaRPN】《Distractor-aware Siamese Networks for Visual Object Tracking》

ECCV-2018 中科大 文章目录 1 Background and Motivation2 Related Work3 Advantages / Contributions4 Method4.1 Features and Drawbacks in Traditional Siamese Networks4.2 Distractor-aware Training4.3 Distractor-aware Incremental Learning4.4 DaSiamRPN for Long-t…

GPT办公与科研应用、论文撰写、数据分析、机器学习、深度学习及AI绘图高级应用

原文链接&#xff1a;GPT办公与科研应用、论文撰写、数据分析、机器学习、深度学习及AI绘图高级应用https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247606667&idx3&sn2c5be84dfcd62d748f77b10a731d809d&chksmfa82606ccdf5e97ad1a2a86662c75794033d8e2e…

基于Pytorch实现AI写藏头诗

网上你找了一圈发现开源的代码不是付费订阅就是代码有问题,基于Pytorch实现AI写藏头诗看我这篇就够了。 用到的工具:华为云ModelArts平台的notebook/Pycharm/Vscode都行。 镜像:pytorch1.8-cuda10.2-cudnn7-ubuntu18.04,有GPU优先使用GPU资源。 实验背景 在短时测试使用场…

字符串及其应用

内容 编写程序实现字符串的基本运算&#xff1a; (1) 求串的长度、两串连接、串比较、子串匹配&#xff1b; (2) 用库函数直接实现上一步的字符申操作 完整代码 #include <iostream> #include <stdio.h> #include<string.h> using namespace std; #define M…

ASUS华硕ROG幻14Air笔记本GA403UI(UI UV UU UJ)工厂模式原厂Windows11系统安装包,带MyASUS in WinRE重置还原

适用型号&#xff1a;GA403UI、GA403UV、GA403UU、GA403UJ 链接&#xff1a;https://pan.baidu.com/s/1tz8PZbYKakfvUoXafQPLIg?pwd1mtc 提取码&#xff1a;1mtc 华硕原装WIN11系统工厂包带有ASUS RECOVERY恢复功能、自带面部识别,声卡,显卡,网卡,蓝牙等所有驱动、出厂主题…

pdf格式转成jpg图片,pdf格式如何转jpg

pdf转图片的方法&#xff0c;对于许多人来说可能是一个稍显陌生的操作。然而&#xff0c;在日常生活和工作中&#xff0c;我们有时确实需要将pdf文件转换为图片格式&#xff0c;以便于在特定的场合或平台上进行分享、展示或编辑。以下&#xff0c;我们将详细介绍一个pdf转成图片…

博客摘录「 AXI三种接口及DMA DDR XDMA介绍(应用于vivado中的ip调用)」2024年6月10日

关键要点&#xff1a; 1.AXI Stream经过协议转换可使用AXI_FULL&#xff08;PS与PL间的接口&#xff0c;如GP、HP和ACP&#xff09;。 2.传输数据类里就涉及一个握手协议&#xff0c;即在主从双方数据通信前&#xff0c;有一个握手的过程。基本内容&#xff1a;数据的传输源会…

探索Jetpack Compose中的高效导航库:Voyager项目

探索Jetpack Compose中的高效导航库&#xff1a;Voyager项目 在Jetpack Compose中实现高效、可扩展的导航是每个开发者的追求。Voyager作为一个多平台导航库&#xff0c;不仅与Jetpack Compose无缝集成&#xff0c;还提供了一套务实的API&#xff0c;帮助开发者创建单活动应用…

数据分析常用6种分析思路(下)

作为一名数据分析师&#xff0c;你又没有发现&#xff0c;自己经常碰到一些棘手的问题就没有思路&#xff0c;甚至怀疑自己究竟有没有好好学过分析&#xff1f; 在上篇文章里&#xff0c;我们讲到了数据分析中的流程、分类、对比三大块&#xff0c;今天&#xff0c;我们继续讲…

哈喽GPT-4o——对GPT-4o Prompt的思考与看法

目录 一、提示词二、提示词的优势1、提升理解能力2、增强专注力3、提高效率 三、什么样的算无效提示词&#xff1f;1、过于宽泛2、含糊不清3、太过复杂4、没有具体上下文5、缺乏明确目标6、过于开放7、使用专业术语但未定义8、缺乏相关性&#xff1a; 四、提示词正确的编写步骤…

Linux2-系统自有服务防火墙与计划任务

一、什么是防火墙 防火墙主要用于防范网络攻击&#xff0c;防火墙一般分为软件防火墙、硬件防火墙 1、Windows中的防护墙设置 2、防火墙的作用 3、Linux中的防火墙分类 Centos6、Centos6>防火墙>iptables防火墙 防火墙系统管理工具 Centos7>防火墙>firewalld防火…

【踩坑】修复Ubuntu远程桌面忽然无法Ctrl C/V复制粘贴及黑屏

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 说在前面&#xff1a; 需要注意的是&#xff0c;我发现他应该是新开了一个窗口给我。我之前打开的东西&#xff0c;在这个新窗口里都没有了&#xff0c…