Java WebDriver 使用经验
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 使用经验的更多相关文章
- Cucumber java + Webdriver(一)
一.打开Eclipse,新建一个maven项目,打开pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xm ...
- linux+java+webdriver chrome handless无界面启动
网上现有的解决方案要么是windows下的,要么是python的,搞了一天终于解决了,记录如下. 1 下载chrome linux版和对应版本的webdriver,我这里使用的是chrome66和ch ...
- java webdriver的api的封装
我们来看一下官网提供的代码写法,即最原始的写法: driver.findElement(By.id("kw")).click() 这样写是没任何问题的,但这样没有把元素对象,数据, ...
- (java) webdriver 启动firefox driver时,加载firebug的扩展
去网上下载一个firebug.xpi(对应版本, 我的ff是17,可以使用firebug-1.11.4.xpi,最好使用非firefox浏览器下载,不然提示你直接安装到firefox) @Before ...
- Java为何大行其道
Java为何大行其道 --专訪传智播客冯威老师 冯威老师,多年来一直从事软件开发和教学工作.先后担任过项目经理.软件架构师.软件开发project师.系统架构师.讲师等.具备丰富的软件开发经验和教学经 ...
- [软件测试基础2]基于selenium的自动化测试
这次上机我们主要使用Selenium进行自动化测试,首先我们需要下载selenium-java的依赖项. 若使用maven管理项目,则在.pom文件中加入如下依赖项: <dependency&g ...
- 网络爬虫-获取infoq里的测试新闻保存至html
用java+webdriver+testng实现获取infoq里的测试新闻,获取文章标题和内容,保存至html文件 前提条件: 已安装好java环境,工程导入了webdriver的jar包和testn ...
- Cucumber 相关资源
Cucumber support: https://cucumber.io/support yan1234abcd的专栏:http://blog.csdn.net/yan1234abcd/articl ...
- Selenium上机实验
1.安装SeleniumIDE插件 2.学会使用SeleniumIDE录制脚本和导出脚本 3.访问https://psych.liebes.top/st使用学号登录系统(账户名为学号,密码为学号后6位 ...
随机推荐
- C# 委托知识总结
原文地址:http://www.cnblogs.com/qingyuan/archive/2010/05/11/1732415.html 1.什么是委托,为什么要使用委托 我正在埋头苦写程序,突然想喝 ...
- RocketMQ集群部署记录
RocketMQ集群部署记录 #引用 https://cloud.tencent.com/developer/article/1147765 一.RocketMQ基础知识介绍 A ...
- QT 14 线程使用
1 线程基础 QThread 是对本地平台线程的一个非常好的跨平台抽象.启动一个线程非常简单.让我们看一段代码,它产生另一个线程,该线程打印hello,然后退出. // hellothread/hel ...
- 在Eclipse中运行Web项目Jsp网页时提示端口被占用的解决办法:Several ports (8005, 8888, 8009) required by Tomcat v9.0 Server at localhost are already in use.
问题: 在Eclipse中运行Web项目Jsp网页启动Tomcat时提示端口被占用: Several ports (8005, 8080, 8009) required by Tomcat v9.0 ...
- PAT A1107 Social Clusters (30 分)——并查集
When register on a social network, you are always asked to specify your hobbies in order to find som ...
- PAT A1021 Deepest Root (25 分)——图的BFS,DFS
A graph which is connected and acyclic can be considered a tree. The hight of the tree depends on th ...
- nginx环境搭建
nginx安装步骤 安装nginx[root@insure opt]# yum install nginx启动nginx [root@insure opt]# service nginx start ...
- docker官方文档笔记
Docker在 CentOS7.X上运行.Docker可能在其他EL7的兼容版本中成功安装,但是官方并未进行测试,因此也不提供任何支持. 系统环境要求 docker必须运行在64-bit的系统上,对于 ...
- node-inspector调试工具
1. npm或者cnpm 安装node-inspector 命令: cnpm install -g node-inspector (说明: 全局安装) 2. 使用node-inspect ...
- python里面 循环明细对比 相同人员明细,生成同一订单里面
#2018-04-16 def action_create_purc(self,cr,uid,ids,context=None): mrp_origin_obj=self.browse(cr,uid, ...