iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java利用Selenium操作浏览器的示例详解
  • 285
分享到

Java利用Selenium操作浏览器的示例详解

Java Selenium操作浏览器Java Selenium 浏览器Java Selenium 2023-01-06 15:01:31 285人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录简介设置元素等待显式等待隐式等待强制等待总结简介 本文主要介绍如何使用java代码利用selenium操作浏览器,某些网页元素加载慢,如何操作元素就会把找不到元素的异常,此时需要

简介

本文主要介绍如何使用java代码利用selenium操作浏览器,某些网页元素加载慢,如何操作元素就会把找不到元素的异常,此时需要设置元素等待,等待元素加载完,再操作。

设置元素等待

很多页面都使用 ajax 技术,页面的元素不是同时被加载出来的,为了防止定位这些尚在加载的元素报错,可以设置元素等来增加脚本的稳定性。WEBdriver 中的等待分为 显式等待 和 隐式等待。

显式等待

显式等待:设置一个超时时间,每个一段时间就去检测一次该元素是否存在,如果存在则执行后续内容,如果超过最大时间(超时时间)则抛出超时异常(TimeoutException)。显示等待需要使用 WebDriverWait,同时配合 until 或 not until 。下面详细讲解一下。

import org.openqa.selenium.By;
import org.openqa.selenium.NoSuchElementException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
 
 

public class SeleniumDemo {
    private final static String webDriver = "webdriver.chrome.driver";
    private final static String webDriverPath ="E:\\chromedriver\\chromedriver.exe";
 
    public static void main(String[] args) throws InterruptedException {
        System.setProperty(webDriver, webDriverPath);
        WebDriver driver= new ChromeDriver();
        //博客主页
        driver.get("https://blog.csdn.net/weixin_40986713");
        WebElement element=driver.findElement(By.className("submit"));
        long start=System.currentTimeMillis();
        //等待5秒
        WebDriverWait shortWait = new WebDriverWait(driver, 5);
        //5秒内元素加载出来就执行点击
        shortWait.until(ExpectedConditions.elementToBeClickable(element)).click();
        //忽略找不到元素异常
        shortWait.ignoring(NoSuchElementException.class);
        System.out.println("耗时 "+(System.currentTimeMillis()-start)+" ms");
    }
}
  • until 指定预期条件的判断方法,在等待期间,每隔一段时间调用该方法,判断元素是否存在,直到元素出现。
  • ignoring 指定忽略的异常,如果设定的执行等待超时的时间段内,忽略指定的异常,让程序继续进行。

隐式等待

隐式等待也是指定一个超时时间,如果超出这个时间指定元素还没有被加载出来,就会抛出 NoSuchElementException 异常。

除了抛出的异常不同外,还有一点,隐式等待是全局性的,即运行过程中,如果元素可以定位到,它不会影响代码运行,但如果定位不到,则它会以轮询的方式不断地访问元素直到元素被找到,若超过指定时间,则抛出异常。

使用 driver.manage().timeouts().implicitlyWait() 来实现隐式等待,使用难度相对于显式等待要简单很多。

示例:打开个人主页,设置一个隐式等待时间 5s,通过 id 定位一个不存在的元素,最后打印 抛出的异常 与 运行时间。

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
 
import java.util.concurrent.TimeUnit;
 

public class SeleniumDemo {
    private final static String webDriver = "webdriver.chrome.driver";
    private final static String webDriverPath ="E:\\chromedriver\\chromedriver.exe";
 
    public static void main(String[] args) throws InterruptedException {
        System.setProperty(webDriver, webDriverPath);
        WebDriver driver= new ChromeDriver();
        //博客主页
        driver.get("Https://blog.csdn.net/weixin_40986713");
        //设置全局隐式等待
        driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
        long start=System.currentTimeMillis();
        try {
            driver.findElement(By.className("tarzan"));
        }catch (Exception e){
            System.out.println(e);
            System.out.println("耗时 "+(System.currentTimeMillis()-start)+" ms");
        }
    }
}

代码运行到 driver.findElement(By.className("tarzan"));这句之后触发隐式等待,在轮询检查 5s 后仍然没有定位到元素,抛出异常。

强制等待

用java代码强制当前正在执行的线程休眠(暂停执行)

使用 time.sleep() 强制等待,设置固定的休眠时间,对于代码的运行效率会有影响。

以上面的例子作为参照,将 隐式等待 改为 强制等待。

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
 
 

public class SeleniumDemo {
    private final static String webDriver = "webdriver.chrome.driver";
    private final static String webDriverPath ="E:\\chromedriver\\chromedriver.exe";
 
    public static void main(String[] args) throws InterruptedException {
        System.setProperty(webDriver, webDriverPath);
        WebDriver driver= new ChromeDriver();
        //博客主页
        driver.get("https://blog.csdn.net/weixin_40986713");
        long start=System.currentTimeMillis();
        //等待5s
        Thread.sleep(5000);
        try {
            driver.findElement(By.className("tarzan"));
        }catch (Exception e){
            System.out.println(e);
            System.out.println("耗时 "+(System.currentTimeMillis()-start)+" ms");
        }
    }
}

值得一提的是,对于定位不到元素的时候,从耗时方面隐式等待和强制等待没什么区别。但如果元素经过 2s 后被加载出来,这时隐式等待就会继续执行下面的代码,但 sleep还要继续等待 3s。

总结

推荐使用的隐式等待,也就是implicitlyWait。

理由:

使用implicitlyWait或者明确等待(explicitly wait),方法参数是等待的最大时长。

也就是只要一找到元素,就会立刻执行下一行代码,不会强制等待参数里设置的时间。

而第三种(线程休眠)则不同,会强制等待设置的时间。设想一下,如果你的工程有好几百个case,

需要等待的元素都采用第三种,会大大加长所有case执行的时间,而你又急着要report,岂不是很惨。

使用implicitlyWait,webdriver会自动应用到case中的所有element中。在启动浏览器(driver.get)之后设置上,这样就不用针对某个元素去设置了,简直太方便了,不过有些特殊的元素,确实等待时间较长的,可以再采用explicit wait。

如果implicitlyWait和explicitly wait都在用在代码里,那么最大等待时间不是两个时间的叠加,而是取最大值。

到此这篇关于Java利用Selenium操作浏览器的示例详解的文章就介绍到这了,更多相关Java Selenium操作浏览器内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java利用Selenium操作浏览器的示例详解

本文链接: https://www.lsjlt.com/news/177006.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java利用Selenium操作浏览器的示例详解
    目录简介设置元素等待显式等待隐式等待强制等待总结简介 本文主要介绍如何使用java代码利用Selenium操作浏览器,某些网页元素加载慢,如何操作元素就会把找不到元素的异常,此时需要...
    99+
    2023-01-06
    Java Selenium操作浏览器 Java Selenium 浏览器 Java Selenium
  • Python+selenium实现浏览器基本操作详解
    目录关闭 driver 启动的浏览器浏览器最大化与设置浏览器窗口大小浏览器最大化设置浏览器窗口大小浏览器的前进、后退与刷新页面关闭 driver 启动的浏览器 上一章节文末,我们介绍...
    99+
    2024-04-02
  • 利用QT实现图片浏览器的示例详解
    目录1、概述2、代码示例3、演示图片1、概述 案例:制作一个小的图片浏览器,要求可以显示jpg、jpeg、png、bmp。可以从电脑上拖动图到窗口并显示出来。  实现步骤: 1.创建...
    99+
    2023-02-23
    QT实现图片浏览器 QT图片浏览器 QT图片
  • 利用Python+selenium技术,实现浏览器基本操作详解,代码有详细注释
    首先,需要安装selenium库和对应的浏览器驱动程序。以Chrome浏览器为例,可以使用以下命令安装selenium和chromedriver: pip install selenium 然后,需要下载对应版本的chromedriver...
    99+
    2023-09-02
    python selenium chrome
  • Python+Selenium实现浏览器的控制操作
    目录浏览器参数设置浏览器窗口大小设置获取浏览器内容控制浏览器前进/后退控制浏览器滚动条浏览器多窗口切换浏览器参数设置 设置浏览器参数实在定义driver的时候设置chrome_opt...
    99+
    2024-04-02
  • Java操作Excel的示例详解
    目录使用场景excel 03 和 07的区别POIeasyExcel解析excel表中的对象POI使用步骤POI 写数据POI 读数据计算公式easyExcel读写数据写数据读数据j...
    99+
    2023-01-10
    Java操作Excel方法 Java操作Excel Java Excel
  • JS监控关闭浏览器操作的示例分析
    这篇文章给大家分享的是有关JS监控关闭浏览器操作的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。JS监控关闭浏览器操作的实例详解需求如下: 用户关闭浏览器通知后台。 方案...
    99+
    2024-04-02
  • Java API操作Hdfs的示例详解
    目录1.遍历当前目录下所有文件与文件夹2.遍历所有文件3.创建文件夹4.删除文件夹5.上传文件6.下载文件1.遍历当前目录下所有文件与文件夹 可以使用listStatus方法实现上述...
    99+
    2024-04-02
  • Python中Selenium自动化浏览器测试的示例分析
    小编给大家分享一下Python中Selenium自动化浏览器测试的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Python之Selenium(自动化浏览...
    99+
    2023-06-29
  • 利用Python中xlwt模块操作excel的示例详解
    目录一、安装二、创建表格并写入三、设置单元格样式四、设置单元格宽度五、设置单元格背景色六、设置单元格内容对齐方式七、单元格添加超链接八、单元格添加公式九、单元格中输入日期十、合并行和...
    99+
    2024-04-02
  • go操作Kafka使用示例详解
    目录1. Kafka介绍1.1 Kafka是什么1.2 Kafka的特点1.3 常用的场景1.4 Kafka中包含以下基础概念1.5 消息1.6 消息格式2. Kafka深层介绍2....
    99+
    2022-12-08
    go操作Kfaka go Kfaka
  • 用python操作浏览器的三种方式
    第一种:selenium导入浏览器驱动,用get方法打开浏览器,例如: import time from selenium import webdriver def mac():     driver = webdriver.Fire...
    99+
    2023-01-31
    三种 浏览器 操作
  • js在浏览器中的event loop事件队列示例详解
    目录前言认识一个栈两个队列执行过程简单例子难一点的例子总结前言 以下内容是js在浏览器中的事件队列执行,与在nodejs中有所区别,请注意。 都说js是单线程的,不过它本身其实不是单...
    99+
    2024-04-02
  • Java利用SPI实现解耦的示例详解
    目录概述实现案例优势和不足概述 SPI的全称是服务提供接口,可以用其来启动框架的扩展和替换组件。 其本质是利用 接口实现+策略模式+配置文件来实现对实现类的动态加载。 在具体的使用中...
    99+
    2023-05-14
    Java SPI实现解耦 Java SPI解耦 Java 解耦
  • 使用python-pptx操作PPT的示例详解
    目录1. PPT基本结构在python-pptx下定义1.1. 演示文档结构定义1.2. 自定义幻灯片母版2. python-pptx操作PPT实践2.1. 安装python-ppt...
    99+
    2023-01-12
    python-pptx操作PPT python-pptx PPT
  • java软引用在浏览器使用实例讲解
    1、说明 如果一个网页在浏览结束时回收内容,需要按后退查看之前浏览过的页面时重建; 如果将浏览过的网页存储在内存中,会造成大量内存浪费,甚至导致内存溢出。 2、实例 // 获取...
    99+
    2024-04-02
  • Python中字典常用操作的示例详解
    目录前言初始化合并字典字典推导式Collections 标准库字典转 JSON字典转 Pandas前言 字典是Python必用且常用的数据结构,本文梳理常用的字典操作,看这个就够了,...
    99+
    2024-04-02
  • Python操作word文档的示例详解
    目录写在前面创建一个文档先实现第一步,写入一个标题添加文字段落列表的添加图片的添加表格添加相关样式设置页眉和页脚写在前面 python-docx 不支持 doc 文档,一定要注意该点...
    99+
    2024-04-02
  • Rust 中的文件操作示例详解
    目录文件路径文件创建和删除目录创建和删除文件创建和删除文件读取和写入文件打开文件读取文件写入相关资料文件路径 想要打开或者创建一个文件,首先要指定文件的路径。 Rust 中的路径操作...
    99+
    2024-04-02
  • C#数据库操作的示例详解
    目录功能需求技术知识点准备工作实现步骤功能需求 1,利用随机数模拟产生每次考试成绩 2,将每次考试成绩存入到数据库 3,将每次考试成绩划分优、良、中、差、不及格五类,并作为查询条件,...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作