0x00 背景

WebDriver作为Selenium项目的工具之一,可以高效的操作各类主流浏览器包括诸如:chrome、IE、Firefox、Safari,并同时支持windows和*nux系统。WebDriver的初衷是为了自动化测试,之后随着爬虫的兴起,由于不用分析和目标网站繁琐的交互数据包,使用方便加上较高的效率以及一定的反反爬虫特点,在针对特定网站内容爬取上,应用较多。

由于自己最近的一个项目需求,对WebDriver进行了学习和应用,为了保持和系统后台语言的一致性(后台使用spring框架),我选用的Java作为开发语言。WebDriver基本的使用就不累述了,网上一搜一大把的,这里主要分享一下在使用过程中遇到的坑以及解决方案。

0x01 元素不可交互(element not interactable)

以国外知乎quora的登陆页面为例,想要在Email输入框中填写信息,下图红框中:

若按照WebDriver官方的文档操作的,就会抛出"element not interactable"的异常,代码如下:

解决方法是使用Actions来进行操作,代码如下:

建议所有类似的操作,都直接使用Actions来进行操作,避免出现类似的问题。

0x02 内嵌iframe标签

有一些网页会通过内嵌iframe标签的方法,来实现某些功能,如果直接操作iframe标签中元素,会抛出"找不到元素(no such element)"的异常。比如163邮箱的注册页面:

如果直接操作红框中的元素,想在其中输入用户名,则会抛出异常。这个原因就是由于该元素在一个iframe中:

此时的解决方案就是WebDriver提供的switchTo()方法,切换到该iframe中,再去操作目标元素,关键代码如下:

0x03 下拉框问题

某些下拉框不能按照常规的流程来处理,即找到元素然后再点击,用代码表示就是下面这样的:

一个例子就是国外社交网站snapchat的注册页面,其手机号的国际区号选择就是这样一个下拉框:

如果按照常规流程,会抛出找不到元素的异常。

此时解决方案是使用WebDriver提供的Select类,关键代码如下:

by:会飞的猫

转载请注明:http://www.cnblogs.com/flycat-2016

Java WebDriver 使用经验的更多相关文章

  1. Cucumber java + Webdriver(一)

    一.打开Eclipse,新建一个maven项目,打开pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xm ...

  2. linux+java+webdriver chrome handless无界面启动

    网上现有的解决方案要么是windows下的,要么是python的,搞了一天终于解决了,记录如下. 1 下载chrome linux版和对应版本的webdriver,我这里使用的是chrome66和ch ...

  3. java webdriver的api的封装

    我们来看一下官网提供的代码写法,即最原始的写法: driver.findElement(By.id("kw")).click() 这样写是没任何问题的,但这样没有把元素对象,数据, ...

  4. (java) webdriver 启动firefox driver时,加载firebug的扩展

    去网上下载一个firebug.xpi(对应版本, 我的ff是17,可以使用firebug-1.11.4.xpi,最好使用非firefox浏览器下载,不然提示你直接安装到firefox) @Before ...

  5. Java为何大行其道

    Java为何大行其道 --专訪传智播客冯威老师 冯威老师,多年来一直从事软件开发和教学工作.先后担任过项目经理.软件架构师.软件开发project师.系统架构师.讲师等.具备丰富的软件开发经验和教学经 ...

  6. [软件测试基础2]基于selenium的自动化测试

    这次上机我们主要使用Selenium进行自动化测试,首先我们需要下载selenium-java的依赖项. 若使用maven管理项目,则在.pom文件中加入如下依赖项: <dependency&g ...

  7. 网络爬虫-获取infoq里的测试新闻保存至html

    用java+webdriver+testng实现获取infoq里的测试新闻,获取文章标题和内容,保存至html文件 前提条件: 已安装好java环境,工程导入了webdriver的jar包和testn ...

  8. Cucumber 相关资源

    Cucumber support: https://cucumber.io/support yan1234abcd的专栏:http://blog.csdn.net/yan1234abcd/articl ...

  9. Selenium上机实验

    1.安装SeleniumIDE插件 2.学会使用SeleniumIDE录制脚本和导出脚本 3.访问https://psych.liebes.top/st使用学号登录系统(账户名为学号,密码为学号后6位 ...

随机推荐

  1. VC++界面编程之--仿Facebook透明登录窗体

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/renstarone/article/details/27642765 1. 开发工具:VC++ DU ...

  2. Spring Cloud Eureka 属性作用

    配置参数 默认值 说明 服务注册中心配置 Bean类:org.springframework.cloud.netflix.eureka.server.EurekaServerConfigBean eu ...

  3. RESTful API实战笔记(接口设计及Java后端实现)

    写在前面的话 原计划这部分代码的更新也是上传到ssm-demo仓库中,因为如下原因并没有这么做: 有些使用了该项目的朋友建议重新创建一个仓库,因为原来仓库中的项目太多,结构多少有些乱糟糟的. 而且这次 ...

  4. PHP 使用 ElasticSearch

    环境 php 7.2elasticsearch 6.2 下载elasticsearch-php 6 下载 安装 elasticsearch 下载源文件,解压,重新建一个用户,将目录的所属组修改为此用户 ...

  5. Hue添加Spark notebook

    参考自https://blogs.msdn.microsoft.com/pliu/2016/06/18/run-hue-spark-notebook-on-cloudera/ 说明 使用Clouder ...

  6. MySQL主从同步原理

    mysql主从复制用途 实时灾备,用于故障切换 读写分离,提供查询服务 备份,避免影响业务 主从部署必要条件 主库开启binlo日志(设置log-bin参数) 主从server-id不同 从库可以连同 ...

  7. 理解socket.io(一)---相关的API

    理解socket.io(一)---相关的API 1. 什么是Socket.IO?Socket.IO是node.js的一个模块,它用于浏览器与服务端之间实时通信.它提供了服务器和客户端的组件,只需一个模 ...

  8. 利用python scapy包进行抓包发包与ARP扫描

    小技巧 通过在交互式的python解释器下,可以通过help()函数查看函数或模块的用途. dir() 函数不带参数时,返回当前范围内的变量.方法和定义的类型列表:带参数时,返回参数的属性.方法列表 ...

  9. HTML 浏览器抓包

    1.浏览器 2.抓包 3.查看get/post/cookie 一 谷歌浏览器 二 抓包查看get/post数据.cookie 截图:

  10. C++基类的析构函数定义为虚函数的原因

    1:每个析构函数只会清理自己的成员(成员函数前没有virtual).2:可能是基类的指针指向派生类的对象,当析构一个指向派生类的成员的基类指针,这时程序不知道这么办,可能会造成内存的泄露,因此此时基类 ...