我们前面的学习中都是输入固定的网址,而selenium模块会直接控制浏览器,实际点击链接并且填写登录信息,因此就像真的有用户在电脑前操作一样
selenium模块是用于Web测试的自动化的一个工具,其功能非常强大,可直接运行在浏览器中,支持大部分主流浏览器,支持自动录制动作和自动生成
一、安装及脚本编辑
安装
直接输入pip intall selenium即可(successfully)
脚本编辑
以一个例子作为其模块的基本使用
from selenium import webbrowser
#调用该selenium模块
browser = webdriver.Firefox()
#启动Firefox浏览器
type(browser)
#打印其类型数据类型
#<class 'selenium.webdriver.firebox.webDriver'>
browser.get('http://inventwithpython.com')
#将浏览器指向该网址
注意:
如果我们的浏览器是Chrome,IE,就要把Firefox替换掉
e.g.Chrome浏览器就需要对应的Chrome driver来驱动,故在之前,我们确保有这些驱动(即浏览器能正常使用)
二、页面中查找元素
web Driver对象用于在页面中寻找元素,其有好几种方法
方法 | 描述 |
find_element_* | 返回一个webElement对象,代表页面中匹配查询的第一个元素 |
find_elements_* | 返回webElement_*对象的列表,包含页面中所有匹配的元素 |
下面表1介绍部分的selenium的web Driver方法,用于寻找元素
方法名 | 返回的web Element对象/列表 |
browser.find_element(s)_by_class_name(name) | 使用CSS类的name元素 |
browser.find_element(s)_by_css_selector(selector) | 匹配CSS selector的元素 |
browser.find_element(s)_by_id(id) | 匹配id属性值的元素 |
browser.find_element(s)_by_link_text(text) | 完全匹配提供的text的<’a‘>元素 |
browser.find_element(s)_by_partial_link_text(name) | 包含提供的text的<’a‘>元素 |
browser.find_element(s)_by_name(name) | 匹配name属性值的元素 |
browser.find_element(s)_by_tag_name(name) | 匹配标签name的元素(大小写无关,可a或A) |
注意:
除*_by_tag_name()方法,所有方法的参数都是区分大小写的,如果没有元素匹配该方法要查找的元素就会抛出异常,为避免程序崩溃,我们需要使用try-except语句
WebElement的属性值及方法
属性/方法 | 描述 |
tag_name | 标签名,例如’a’表示对应标签 |
get_attribute(name) | 该元素name属性的值 |
text | 该元素内的文本 |
clear() | 对于文本字段或文本区域元素,清除其中输入的文本 |
is_display() | 如果该元素可见,返回True,否则返回False |
is_enabled() | 对于输入元素,如果该元素启用,返回True,否则返回False |
is_selected() | 对于复选框或单选框,如果该元素被选中,选择True,否则返回False |
location | 一个字典,包含键’x’和’y’,表示该元素在页面上的位置 |
e.g.
from selenium import webdriver
browser = webdriver.Firefox()
browser.get('http://inventwithpython.com')
try:
elem = browser.find_element_by_class_name('bookcover')
print('Found<%s> element with that class name!' %(elem.tag_name))
except:
print('Was not able to find an element with taht name.')
#输出为
#Found <img> element with that class name!
参照上表及代码,可知打开了浏览器,指向了一个URL,试图找到类型’bookcover’的元素
如果找到,就用tag_name属性把它的标签名打印出来
如果没找到,就打印信息
三、点击页面
前面提到过的find_element_* 和find_elements_* 方法返回的web Element对象有一个click()方法,即模拟鼠标在该元素上的点击
实质就是用于链接跳转,选择单选按钮,点击提交按钮或者会触发该元素被点击时发生的任何事情
e.g.
from selenium import webdriver
browser = webdriver.Firefox()
browser.get('http://inventwithpython.com')
linkElem = browser.find_element_by_link_text('Read It Online')
#取得a元素的web Element对象,文本是Read It Online
type(linkElem)
#打印其类型
linkElem.click()
#模拟点击
以上操作就像自己点击这个链接一样,浏览器也将跳转到这个链接
四、填写并提交表单
先看一段代码
from selenium import webdriver
browser = webdriver.Firefox()
browser.get('http://gmail.com')
#进入该浏览器
emailElem = browser.find_element_by_id('Email')
emailElem.send_keys('not_my_real_email@gmail.com')
#找到对应的邮箱用户名标签
#再发送对应的用户名
passwordElem = browser.find_element_by_id('Passwd')
passwordElem.send_keys('12345')
#找到对应的邮箱密码标签
#再发送对应的密码
passwordElem.submit()
#等同于点击该元素所在表单的Submit按钮
注释下面写的比较清楚各部分的作用,但还是要注意一下send_keys()方法以及直接调用submit()方法
五、特殊键
针对不能用字符串值输入的键盘击键,功能非常类似于转义字符
这些值保存在selenium.webdriver.common.keys模块的属性中
由于名字非常长,故我们在顶部运行时
from selenium.webdriver.common.keys import Keys
下表列出了常用的变量
属性 | 描述 |
Keys.DOWN ,Keys.UP,Keys.LEFT,Keys.RIGHT | 键盘的箭头键 |
Keys.ENTER,Keys.RETURN | 回车和换行键 |
Keys.HOME,Keys.END,Keys.PAGE_DOWN,Keys.PAGE_UP | Home键,End键,PageUp键,PageDown键 |
Keys.ESCAPE ,Keys.BACK_SPACE,Keys.DELETE | Esc, Backspace, 字母键 |
Keys.F1, …Keys.F12 | 键盘顶部的F1到F12 |
Keys.TAB | Tab键 |
举个例子:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
browser = webdriver.Firefox()
browser.get('http://norstarch.com')
#进入该浏览器对应网址
htmlElem = browser.find_element_by_tag_name('html')
htmlElem.send_keys(Keys.HOME)
htmlElem.send_keys(Keys.END)
假如光标不在文本字段中,按下home和end键,将使浏览器滚动到页面的顶部或底部
六、浏览器按钮
下面列出一部分的selenium模块模拟点击各种浏览器按钮的方法
方法 | 描述 |
browser.back() | 点击”返回“按钮 |
browser.forward() | 点击”前进“按钮 |
browser.refresh() | 点击”刷新“按钮 |
browser.quit() | 点击”关闭窗口“按钮 |
第五篇python之爬虫的学习就到此结束啦!