添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
英勇无比的金鱼  ·  Selenium 中使用 ...·  14 小时前    · 
才高八斗的咖啡  ·  Java ...·  14 小时前    · 
沉稳的绿豆  ·  借助 Selenium 从 PEER ...·  14 小时前    · 
干练的麻辣香锅  ·  python - How do I ...·  2 年前    · 

有一个需求是:页面上有一批测试数据要删除,一共10万条数据,每页显示20条,一共5000页,手动删除的操作一般是先点击全选本页20条,点击"删除"按钮,再点击弹出"确认"按钮完成一次操作。人工点击太费时费力,本来写了一个js脚本,每隔10秒定时去操作,把脚本放在当前页面的浏览器控制台执行,不一会浏览器就卡死了。这时selenium就派上用场了

所需依赖:

<dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-java</artifactId>
    <version>2.53.1</version>
</dependency>
<dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-api</artifactId>
    <version>2.53.1</version>
</dependency>
<dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-chrome-driver</artifactId>
    <version>2.53.1</version>
</dependency>
<dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-support</artifactId>
    <version>2.53.1</version>
</dependency>
<dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-server</artifactId>
    <version>2.53.1</version>
</dependency>
<dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-remote-driver</artifactId>
    <version>2.53.1</version>
</dependency>
<dependency>
    <groupId>org.seleniumhq.selenium</groupId>
    <artifactId>selenium-htmlunit-driver</artifactId>
    <version>2.52.0</version>
</dependency>

代码实现逻辑:

// 加载驱动
System.setProperty("webdriver.chrome.driver", "D:/chromedriver/chromedriver.exe");
driver = new ChromeDriver();
// 访问登陆页面
driver.get("这里写登陆页url");
// 跳转到原始登录页
WebElement oldLogBtn=((ChromeDriver) driver).findElementByLinkText("旧版页面登录");
oldLogBtn.click();
// 用户名
WebElement username=((ChromeDriver) driver).findElementById("username");
username.sendKeys("这里写用户名");
// 密码
WebElement password=((ChromeDriver) driver).findElementById("password");
password.sendKeys("这里写密码");
// 记住登录状态
WebElement remember=((ChromeDriver) driver).findElementById("rememberMe");
remember.click();
// 提交登陆
WebElement submit =((ChromeDriver) driver).findElementById("login");
submit.click();
driver.get("这里写抓取页url");
// 当前页面全选框
WebElement checkbox = ((ChromeDriver) driver).findElementById("checkbox");
// 通讯录删除按钮
WebElement delBtn = ((ChromeDriver) driver).findElement(By.xpath("//*[@id=\"content-header\"]/div/button[2]"));
// 删除确认按钮
// WebElement confirmBtn = ((ChromeDriver) driver).findElement(By.cssSelector(".btn.btn-primary.submit "));
WebElement confirmBtn = ((ChromeDriver) driver).findElement(By.xpath("//*[@id=\"del-contacts\"]/div/div[3]/div[1]/button[1]"));
System.out.println("confirmBtn=" + confirmBtn);
Timer timer = new Timer();
timer.schedule(new TimerTask() {
    public void run() {
        // 全选
        checkbox.click();
        try {
            // 删除
            delBtn.click();
            Thread.sleep(1000);
            // 确认
            confirmBtn.click();
        } catch (InterruptedException e) {
            e.printStackTrace();
}, 2000, 5000);

注意要点:

第一:根据你所使用的浏览器,我这里使用的chrome驱动,当然你也可以使用Firefox或者ie等等驱动,下载地址为 chromedriver.exe驱动下载 ,注意驱动版本与电脑上浏览器的版本兼容关系

第二:在找元素的时候,有的时候元素只有一个class属性,而且是多个值,中间还有空格,一般我们在javascript中,通过jQuery这么选取:$(".btn.btn-light"),但是如果在selenium中你通过下面这种方式获取就会报

(1) org.openqa.selenium.NoSuchElementException: no such element: Unable to locate element: {"method":"class name","selector":".btn.btn-light"}:

WebElement button = ((ChromeDriver) driver).findElementByClassName(".btn.btn-light");

(2)接下来我把class属性值中的“.”去掉,改用空格替代,保持页面上class属性值的原样,又报新错误

org.openqa.selenium.InvalidSelectorException: invalid selector: Compound class names not permitted

WebElement delBtn1 = ((ChromeDriver) driver).findElementByClassName("btn btn-light");

这是因为selenium的这个api不支持复合属性

(3)幸好selenium支持css选择器,然后我改成下面的

WebElement confirmBtn2 = ((ChromeDriver) driver).findElement(By.cssSelector(".btn.btn-light"));

这次获取button元素没有出错,但是在调用这个元素的click方法时

报错 org.openqa.selenium.ElementNotVisibleException: element not visible   :

网上说这个错误可能是因为元素选错了,也有可能是这个class属性很多元素都有,所以不唯一;也有可能是页面还没渲染出来,要等待一会;还有可能是这是隐藏元素或遮罩层的元素,反正那个博客分析的挺详细的,你可以慢慢排查,我会在文章下面的参考地址贴出那篇博客;文章建议优先根据元素id来获取元素,没有id就使用xpath路径;尽量不要使用class来获取;

第三:有的人可能不会xpath语法,没关系,打开浏览器控制台,在element标签下,选中你要的元素,鼠标右键,在弹出的菜单中选择“copy”---》“copy  xpath”,粘贴到程序中完事,如下图:

第四:selenium再智能,也要通过浏览器操作,之所以要下载chromedriver.exe,运行程序时会弹出chrome浏览器,一切就绪后,千万不要用鼠标去操作页面,一旦动了页面,程序功能就失效了

第五:遇到渲染慢的页面,sleep一下

后来发现采用httpclient模拟浏览器处理比上面好用;在你不知道按钮发送的请求连接情况下用上面selenium,知道的话还是httpclient效率高一些

参考地址:https://blog.csdn.net/BerlinLove/article/details/70053808

https://blog.csdn.net/duzilonglove/article/details/78603956

有一个需求是:页面上有一批测试数据要删除,一共10万条数据,每页显示20条,一共5000页,手动删除的操作一般是先点击全选本页20条,点击&quot;删除&quot;按钮,再点击弹出&quot;确认&quot;按钮完成一次操作。人工点击太费时费力,本来写了一个js脚本,每隔10秒定时去操作,把脚本放在当前页面的浏览器控制台执行,不一会浏览器就卡死了。这时selenium就派上用场了   所需依赖:&amp;lt;dependency&amp;...
selenium 简介 selenium 是一个web的自动化测试工具,不少学习功能自动化的同学开始首选 selenium ,相因为它相比QTP有诸多有点: * 免费,也不用再为破解QTP而大伤脑筋 * 小巧,对于不同的 语言 它只是一个包而已,而QTP需要下载安装1个多G 的程序。 * 这也是最重要的一点,不管你以前更熟悉C、 java 、ruby、python、或都是C# ,你都可以通过 selenium 完成自动化测试,而QTP只支持VBS * 支持多平台:windows、linux、MAC ,支持多 浏览器 :ie、ff、safari、opera、chrome * 支持分布式测试用例
Selenium 是一款免费的分布式的自动化测试工具,支持多种开发 语言 ,无论是C、 java 、ruby、python、或是C# ,你都可以通过 selenium 完成自动化测试。本文以一个简单的小例子,简述C# 利用 Selenium 进行 浏览器 模拟 操作 ,仅供学习分享 使用 ,如有不足之处,还请指正。 涉及知识点 要实现本例的功能,除了要掌握Html , Java Script,CSS等基础知识,还涉及以下知识点: log4net:主要用于日志的记录和存储,本例 采用 log4net进行日志记录,便于过程跟踪和 问题 排查,关于log4net的配置和介绍,之前已有说明,本文不做赘述。 Queue:队列
在此记录下,之前也没有遇到过这个 问题 ,都是常规的send_keys()方法, 模拟 的ctrl+a 这种组合键 # -*- coding: utf-8 -*- __Author__ = "xiewm" __Date__ = "2016/5/19 18:46"from selenium import webdriver from time import sleep from selenium .webdr
1、Exception in thread "main" org.openqa. selenium .WebDriverException: Cannot find firefox binary in PATH. Make sure firefox is installed. OS appears to be: XP Build info: version: '2.16.1', revision:
1. selenium 介绍 搜到了几种方法:1.urllib2,mechanize,单纯的访问web,不解析其js,css;2. selenium ,利用 浏览器 ,支持js,css等,具体包括打开 浏览器 和不需要打开 浏览器 两种方式,此外还有splinter,将 selenium 进行封装得到更顶层的API。目前仅仅试了一下 selenium selenium 是一种自动化测试工具,用来对web界面进行测试,它...
在上一篇笔记《Ajax数据爬取简介》中我们提到,在爬取动态渲染 页面 的数据时(通常为Ajax),我们可以 使用 AJAX URL分析法和 Selenium 模拟 浏览器 行为两种方法,其中前者已经分析一般思维已叙述,在本节中我们主要介绍如何 使用 Selenium 模拟 浏览器 行为来获取数据。 一、准备工作 在正式介绍 使用 之前,我们需要先安装 selenium 库,安装库的过程和之前一样,我们可以直接 使用 命令’pip ...
报org.openqa. selenium .InvalidArgumentException: invalid argument异常 环境:centos7.6 chrome-version:96.0 当我 使用 webDriver.get(url)时,报参数无效的异常;这是因为当我们在linux下访问本地html时,文件路径要用file:///修饰,也就是url:file:///xxxxx.html。 在windows系统下就没有这个情况了
使用 Selenium 模拟 登录网站的步骤如下: 1. 安装 Selenium 。要 使用 Selenium ,首先需要将其安装到你的 Java 项目中。可以通过在你的项目的依赖管理工具(例如Maven或Gradle)中添加 Selenium 的依赖来安装 Selenium 。 2. 安装 浏览器 驱动程序。要 使用 Selenium 控制 浏览器 ,你需要安装相应的 浏览器 驱动程序。不同的 浏览器 需要 使用 不同的驱动程序。例如,如果你想 使用 Selenium 控制Chrome 浏览器 ,你需要安装ChromeDriver。 3. 创建WebDriver对象。 使用 Selenium 控制 浏览器 的核心类是WebDriver。要创建WebDriver对象,需要调用WebDriver的子类之一的构造函数。例如,如果你想 使用 Selenium 控制Chrome 浏览器 ,你可以 使用 以下代码来创建ChromeDriver对象: WebDriver driver = new ChromeDriver(); 4. 打开登录 页面 使用 WebDriver的get()方法打开登录 页面 。例如,如果你想打开GitHub的登录 页面 ,可以 使用 以下代码: driver.get("https://github.com/login"); 5. 查找登录表单。 使用 Selenium 的各种方法来查找登录表单。例如,可以 使用 findElement()方法来查找表单中的单个元素,或者 使用 findElements()方法来查找多个元
Can not deserialize instance of java.util.ArrayList out of VALUE_STRING token at Dead_Cicle: 确实解决,谢谢。 使用HttpClient模拟访问带有嵌套对象参数的接口 风雨诗轩: 好的,改天试试