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. Mongodb主从模式SECONDARY提升为PRIMARY

    生产环境不建议仅使用PRIMARY-SECONDARY模式 当primary挂掉,并且无法恢复时,可以把secondary提升为主节点. 注意:此时从节点可能有部分数据未同步过来,部分数据可能丢失. ...

  2. YOLO2(1)配置安装win10+openvc2413+VS2013 简单测试官例

    参考官网 https://github.com/AlexeyAB/darknet#how-to-compile-on-windows https://github.com/AlexeyAB/darkn ...

  3. ucml 连接虚字段

  4. Java集合实现类区别与联系

    ArrayList和LinkList相同点和区别: 共性: 都实现了List接口,都是list的实现类,处理list集合操作. 区别: ArrayList:底层存储结构是数组,每个元素都有index标 ...

  5. linux如何查看端口被哪个进程占用

    1.lsof -i:端口号 2.netstat -tunlp|grep 端口号 都可以查看指定端口被哪个进程占用的情况 工具/原料   linux,windows xshell 方法/步骤     [ ...

  6. OpenStack keystone节点搭建(官方2018年4月份文档)

    参考文档:https://docs.openstack.org/install-guide/common/conventions.html https://docs.openstack.org/mit ...

  7. Omi-router实战 Sorrow.X的web简历

    其实这篇文章,真的没啥写的. 主要是为了学以致用,使用了omi-router写了个,个人简历. 路由demo实战源码:https://github.com/SorrowX/resume_demo de ...

  8. cc攻击和ddos攻击的区别和攻防 + 调SYN连接参数

    1.一个是WEB网络层拒绝服务攻击(DDoS),一个是WEB应用层拒绝服务攻击(CC),网络层就是利用肉鸡的流量去攻击目标网站的服务器,针对比较本源的东西去攻击,服务器瘫痪了,那么运行在服务器上的网站 ...

  9. CF1097D Makoto and a Blackboard 积性函数、概率期望、DP

    传送门 比赛秒写完ABC结果不会D--最后C还fst了qwq 首先可以想到一个约数个数\(^2\)乘上\(K\)的暴力DP,但是显然会被卡 在\(10^{15}\)范围内因数最多的数是\(978217 ...

  10. Ionic2 播放mp3功能实现

    在开发app的过程中有需要播放mp3的功能,一直想实现,但苦于具体的困难一直未能实现,经过一段时间的资料查询和测试,最终摸索出来,现记录如下: 1.最重要的是安装第三方插件ionic-audio,开源 ...