Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE、Mozilla Firefox、Mozilla Suite等。

这个工具的主要功能包括:

测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能——创建衰退测试检验软件功能和用户需求。支持自动录制动作和自动生成。Net、Java、Perl等不同语言的测试脚本。Selenium 是ThoughtWorks专门为Web应用程序编写的一个验收测试工具。

Selenium对网页的控制是基于各种前端元素的,在使用过程中,对于元素的定位是基础,只有准去抓取到对应元素才能进行后续的自动化控制。

Chrome安装过程:

在chrome浏览器的设置中,查看chrome的版本号,根据 : http://chromedriver.storage.googleapis.com/index.html下载chrome驱动(chromedriver.exe)

把下载并解压成功的驱动放在:   C:\Users\lenovo\AppData\Local\Google\Chrome\Application(chrome浏览器 安装目录中)

并配置环境变量:C:\Users\lenovo\AppData\Local\Google\Chrome\Application

Chrome例:

# 导报
from selenium import webdriver
import time
import requests
# 建立浏览器对象 指定浏览器
browser = webdriver.Chrome()
# 使用浏览器访问网站
browser.get('http://www.baidu.com')
# 向文本框填充文本
browser.find_element_by_id("kw").send_keys('男神鹏')
time.sleep(1)
# 模拟点击
browser.find_element_by_id("su").click()
time.sleep(5)
# 匹配多个节点 声明是样式选择器
# elist = browser.find_elements('css selector','h3')
elist = browser.find_elements_by_class_name('t')
text_str = elist[0].text
# print(elist[0].text)
# 点击链接
browser.find_element_by_link_text(text_str).click()
# browser.find_element_by_id("su").click()
# 暂停
time.sleep(50)
# 自动关闭浏览器
browser.quit()

Firefox 安装过程:

在Firefox浏览器的设置中,查看Firefox的版本号,根据 : https://github.com/mozilla/geckodriver/releases下载chrome驱动

(geckodriver.exe)

把下载并解压成功的驱动放在  :   D:\Mozilla Firefox(Firefox浏览器 安装目录中)

并配置环境变量:D:\Mozilla Firefox

Firefox例:

# 导报
from selenium import webdriver
import time
import requests
# 建立浏览器对象 指定浏览器
browser = webdriver.Firefox()
# 使用浏览器访问网站
browser.get('http://www.baidu.com')
# 向文本框填充文本
browser.find_element_by_id("kw").send_keys('https://www.cnblogs.com/chengdongzi/')
time.sleep(1)
# 模拟点击
browser.find_element_by_id("su").click()
time.sleep(5)
# 匹配多个节点 声明是样式选择器
# elist = browser.find_elements('css selector','h3')
elist = browser.find_elements_by_class_name('t')
text_str = elist[0].text
# print(elist[0].text)
# 点击链接
browser.find_element_by_link_text(text_str).click()
# browser.find_element_by_id("su").click()
# 暂停
time.sleep(50)
# 自动关闭浏览器
browser.quit()

总结:

xpath定位

xpath也分几种不同类型的定位方法。

一种是绝对路径定位。这种定位方式是利用html标签名的层级关系来定位元素的绝对路径,一般从<html>标签开始依次往下进行查找。

如百度搜索框的绝对路径xpath定位可以是这样的:

find_element_by_xpath("/html/body/div[1]/div[1]/div/div[1]/div/form/span[1]/input")

还有一种是利用元素属性来进行xpath定位

例:搜索框利用id和name定位

find_element_by_xpath("//input[@id='kw']")

find_element_by_xpath("//*[@name='wd']")

其中的标签名input也可以用*来代替,而且只要是在该标签内,任意属性都可以,比如搜索框的maxlength属性:

find_element_by_xpath("//input[@maxlength='255']")

比如查找搜索框的时候发现其上级元素form又唯一的id方便定位,就可以先查找到form元素然后依次往下写路径:

find_element_by_xpath("//form[@id='form']/span/input")

这种定位方式的使用过程中,如果元素的单个属性无法确定其唯一性,可以用and连接多个属性去确定。

find_element_by_css_selector()

CSS属性定位

CSS属性定位可以比较灵活地选择控件的任意属性,定位方式也会比xpath快。

同样是那个百度搜索的例子,可以试一下:

driver.find_element_by_css_selector(".s_ipt").send_keys("selenium")

driver.find_element_by_css_selector("#su").click()

如果有css基础的话就应该可以看懂,一般class是用.标记,id是用#标记,标签名直接写具体标签名就好了。

css定位里面也可以通过属性或者组合方式定位:

driver.find_element_by_css_selector("input[autocomplete='off']").send_keys("Python")

driver.find_element_by_css_selector("span.bg.s_btn_wr>input#su").click()

具体说一下百度一下那个按钮的组合定位方式,这样写的定位顺序是这样的,先定位到一个class名为bg s_btn_wr的span标签,在这个标签下面有一个id为su的input标签,这样就定位到了。

值得注意的是,在css里面下级标签元素用>连接,如果class里面有空格,空格用.进行连接。

find_element_by_tag_name ()

通过标签名去定位的方式一般是这样的:find_element_by_tag_name("input")

可见仅仅通过标签名去定位时,一般一种标签在一个页面里面会出现不止一次甚至大量出现,这种定位方式的作用不是很大,所以用的也就比较少。

find_element_by_link_text()

find_element_by_partial_link_text()

这两种定位方式是专门用于定位超链接的,也就是对应html页面中的<a>标签,括号里传的值就是a标签中的超链接文字,两者的区别在于一个是完整的超链接文字,一个是可以只写部分超链接文字。

比如点击百度首页中右上角的新闻超链接,可以这样去定位:

driver.find_element_by_link_text("新闻").click()

driver.find_element_by_partial_link_text("闻").click()

By定位

find_element(By.ID,"kw")

find_element(By.NAME,"wd")

find_element(By.CLASS_NAME,"s_ipt")

find_element(By.TAG_NAME,"input")

find_element(By.LINK_TEXT,u"新闻")

find_element(By.PARTIAL_LINK_TEXT,u"新")

find_element(By.XPATH,"//*[@class='bg s_btn']")

find_element(By.CSS_SELECTOR,"span.bg s_btn_wr>input#su")

上面这些使用的前提是需要导入By类:from selenium.webdriver.common.by import By

最简单粗暴却失传已久的8种定位

driver.find_element("name","wd").send_keys("Selenium2")

driver.find_element("id","su").click()

by_id -> find_element("id","")

by_xpath -> find_element("xpath","")

by_link_text -> find_element("link text","")

by_partial_text -> find_element("partial link text","")

by_name -> find_element("name","")

by_tag_name -> find_element("tag name","")

by_class_name -> find_element("class name","")

by_css_selector -> find_element("css selector","")

elements复数定位

在上面的例举的八中基本定位方式种,都有对应的复数形式,分别是下面这些:

id复数定位find_elements_by_id()

name复数定位find_elements_by_name()

class复数定位find_elements_by_class_name()

tag复数定位find_elements_by_tag_name()

link复数定位find_elements_by_link_text()

partial_link复数定位find_elements_by_partial_link_text()

xpath复数定位find_elements_by_xpath()

css复数定位find_elements_by_css_selector()

这些复数定位方式每次取到的都是具有相同类型属性的一组元素,所以返回的是一个list队列,我们也可以利用这个去定位单个的元素。比如百度首页种,右上角有新闻、视频、地图、贴吧等一些链接,我们通过f12查看源码可以发现,这些链接都有共同的class, class="mnav"。

人工智能-Selenium的更多相关文章

  1. 人工智能-机器学习之Selenium(chrome驱动,火狐驱动)

    selenium是一个用于web应用程序测试的工具,Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.支持的浏览器包括IE.Mozilla Firefox.Mozilla Suite等 ...

  2. 九、Python+Selenium模拟用QQ登陆腾讯课堂,并提取报名课程(练习)

    研究QQ登录规则的话,得分析大量Javascript的加密解密,比较耗时间.自己也是练习很少,短时间成功不了.所以走了个捷径. Selenium是一个WEB自动化测试工具,它运行时会直接实例化出一个浏 ...

  3. [转] 以后再有人问你selenium是什么,你就把这篇文章给他

    本文转自:https://blog.csdn.net/TestingGDR/article/details/81950593 写在最前面:目前自动化测试并不属于新鲜的事物,或者说自动化测试的各种方法论 ...

  4. selenium验证码和错误截图

    验证码的识别: 1,破解验证码 OCR识别(一般使用tesseract-ocr) 人工智能(AI机器学习 TensorFlow,成本大) 2,绕过验证码 1, 让开发人员临时关闭验证码 2,提供万能验 ...

  5. 人工智能时代,应立即学习python

    人工智能时代,应立即学习python 应用:web开发,自动化运维开发,自动化测试,数据分析,机器学习 1.python 快速易学习2.python 基于web开发(zhihu:tornad web框 ...

  6. Web自动化selenium技术快速实现爬虫

    selenium是大家众所周知的web自动化测试框架,主要用来完成web网站项目的自动化测试,但其实如果要实现一个web爬虫,去某些网站爬取数据,其实用selenium来实现也很方便. 比如,我们现在 ...

  7. ASP.NET MVC WebApi 返回数据类型序列化控制(json,xml) 用javascript在客户端删除某一个cookie键值对 input点击链接另一个页面,各种操作。 C# 往线程里传参数的方法总结 TCP/IP 协议 用C#+Selenium+ChromeDriver 生成我的咕咚跑步路线地图 (转)值得学习百度开源70+项目

    ASP.NET MVC WebApi 返回数据类型序列化控制(json,xml)   我们都知道在使用WebApi的时候Controller会自动将Action的返回值自动进行各种序列化处理(序列化为 ...

  8. RobotFramework自动化测试框架-Selenium Web自动化(二)关于在RobotFramework中如何使用Selenium很全的总结(上)

    好久没有继续分享关于自动化测试相关的东西了,自动化在现今的测试领域已经越来越重要了,大部分公司在测试岗位招聘中都需要会相关的自动化测试知识.而 RobotFramework自动化测试框架 是自动化测试 ...

  9. selenium篇之滑动验证码

    一.介绍 现在出现了一种通过用户鼠标移动滑块来填补有缺口图片的验证码,我们叫做滑动验证码.它的原理很简单,首先生成一张图片,然后随机挖去一块,在页面展示被挖去部分的图片,再通过js获取用户滑动距离,以 ...

随机推荐

  1. 微信小程序页面无法跳转

    推荐网址:https://www.jianshu.com/p/e56b55334585 1.无法跳转原因分析 要跳转的路径在app.js里未注册过或路径写错   要跳转的路径是否位于TabBar中 页 ...

  2. PyCharm+Miniconda3安装配置教程

    PyCharm是Python著名的Python集成开发环境(IDE) conda有Miniconda和Anaconda,前者应该是类似最小化版本,后者可能是功能更为强大的版本,我们这里安装Minico ...

  3. python3- __slots__

    Python允许在定义class的时候,定义一个特殊的__slots__变量,来限制该class实例能添加的属性: class Student(object): __slots__ = ('name' ...

  4. zabbix3.4.7之Zabbix_Trigger_Function详解

    Trigger函数 1.abschange 参数:直接忽略后边的参数 支持值类型:float.int.str.text.log 描述:返回最近获取到的值与之前值的差值的绝对值.对于字符串类型,0表示值 ...

  5. linux下find和grep命令详解

    在linux下面工作,有些命令能够大大提高效率.本文就向大家介绍find.grep命令,他哥俩可以算是必会的linux命令,我几乎每天都要用到他们.本文结构如下: find命令 find命令的一般形式 ...

  6. 逆袭之旅DAY16.东软实训.Oracle.修改用户

    2018-07-12 15:49:51

  7. mac mysql 操作

    参考 http://www.cnblogs.com/chenmo-xpw/p/6102933.html http://www.cnblogs.com/uoar/p/6492521.html 1.启动M ...

  8. Linux关机命令和重启命令

    sync 将数据由内存同步到硬盘中. shutdown 关机指令,你可以man shutdown 来看一下帮助文档.例如你可以运行如下命令关机: shutdown mins’ 这个命令告诉大家,计算机 ...

  9. RabbitMQ 循环调度

    循环调度是针对Consumer消费者来说的.如果有多个Consumer订阅同一个队列的消息,RabbitMQ会自动按照顺序将消息发送到每一个Consumer手中. 就是这么简单!

  10. vue-11-自定义指令

    用于对纯 DOM 元素进行底层操作. // 注册一个全局自定义指令 v-focus Vue.directive('focus', { // 当绑定元素插入到 DOM 中. inserted: func ...