Selenium2的入门学习

来源:互联网 发布:ubuntu源文件在哪 编辑:程序博客网 时间:2024/06/07 05:36

最近由于项目的需求进行了Selenium2的资料查找和学习,原本Selenium2是自动化测试组件,是搞测试用的,如今被俺们用来进行信息爬取。根本的原因在于普通的网页格式html静态的,不包含js和Ajax的,是可以通过httpclient,jsoup等java包进行网页的爬取和解析,但是遇到Ajax动态请求,和执行js的网页来说,爬取下来的也只能是head body之类的标签了。

因此,不知是谁想到了这个慢吞吞的方法,开启浏览器,占内存。但因为Selenium可以模拟浏览器的行为,所以动态执行Ajax请求和js代码,生成dom树结构,所以理论上来讲用来爬取信息是行的通的。废话过多,说Selenium。

Selenium2是目前所使用的,它将webdriver包包含其中,传说Selenium1.0是有单独的webdriver包的。功能也进一步完善。其中Webdriver有启动多种浏览器的方法,详情一搜便有,原生态的浏览器支持莫过于Firefox,因为Selenium是Firefox自家的。所以代码也是最简单的,只要安装有Firefox,new一个浏览器驱动就可以。对于Google的chrome,和ie需要因为Google chrome 的驱动包,System.setProperty("webdriver.chrome.driver",".\\res\\chromedriver.exe");设置代理加载。

http://qa.blog.163.com/blog/static/19014700220122231779/此博文,对webdriver的优缺点进行了一个详细的讨论。说明:webdriver会随着网页流程而变化,并不是之前打开浏览器所传入的url,dom树的生成也会进行不断地变化。

对于Selenium的掌握最基本的也是最核心的就是元素的定位,也就是网页鼠标右键点击之后出现的审查元素。能有多准确的,稳健的定位,换来的就是程序的稳定性。元素的定位有很多种,目前只说明自己貌似记得的有by.name() By.classname(),By.Id().By.xPath().对于这些定位元素,各有各的优势,如果网页中id选择器是不可变的话,id定位起来是最快的最准的。而当css中的class选择器存在复合类时普通的By.classname()是没法驾驭了,这是就可以采用By.XPath().它可以处理复合类这种方式,推荐使用,XPath的语法相对简单明了,支持非html标签的分类,因为其根本则是XML的一种元素定位方式。

基本的元素定位解决,对不同元素的操作,我们也可以查看其文档。这里对元素定位的时间做一下说明,有时网速慢时,会出现元素没有刷新出来,而导致抛出错误,之前在网上找到了WebDriverWait wait = new WebDriverWait(dr, 10); wait.until(ExpectedConditions.elementToBeClickable(By.id("u_0_l")));来进行元素的等待,今天在寻找资料的时候发现了这篇博文,以后可以进行参照:http://blog.csdn.net/ant_ren/article/details/8185899,文章中说明了从两方面进行考虑,一个是原生的Selenium API,一个则为js的注入,检测Ajax request status。

小知识:

关于所定位的元素显示elementinvisible使用firefox浏览器,会出现这种情况,使用chrome浏览器进行解决。请求页面是Ajax模式,要点击相关div才可以使元素可见,而仅仅对input标签进行赋值可能不会触发Ajax请求。元素本身定位错误,或没有加载完成,使用webdriverwait等待


0 0
原创粉丝点击