【1】定义
1.1) 开源的Web自动化测试工具
【2】用途
2.1) 对Web系统进行功能性测试,版本迭代时避免重复劳动
2.2) 兼容性测试(测试web程序在不同操作系统和不同浏览器中是否运行正常)
2.3) 对web系统进行大数量测试
【3】特点
3.1) 可根据指令操控浏览器
3.2) 只是工具,必须与第三方浏览器结合使用
【4】安装
4.1) Linux: sudo pip3 install selenium
4.2) Windows: python -m pip install selenium
phantomjs为无界面浏览器(又称无头浏览器),在内存中进行页面加载,高效
【1】下载驱动
2.1) chromedriver : 下载对应版本
http://npm.taobao.org/mirrors/chromedriver/
2.2) geckodriver
https://github.com/mozilla/geckodriver/releases
2.3) phantomjs
https://phantomjs.org/download.html
【2】添加到系统环境变量
2.1) windows: 拷贝到Python安装目录的Scripts目录中
windows查看python安装目录(cmd命令行):where python
2.2) Linux : 拷贝到/usr/bin目录中 : sudo cp chromedriver /usr/bin/
【3】Linux中需要修改权限
sudo chmod 777 /usr/bin/chromedriver
【4】验证
4.1) Ubuntu | Windows
from selenium import webdriver
webdriver.Chrome()
webdriver.Firefox()
4.2) Mac
from selenium import webdriver
webdriver.Chrome(executable_path='/Users/xxx/chromedriver')
webdriver.Firefox(executable_path='/User/xxx/geckodriver')
示例代码一:使用 selenium+浏览器 打开百度
# 导入seleinum的webdriver接口
from selenium import webdriver
import time
# 创建浏览器对象
driver = webdriver.Chrome()
driver.get('http://www.baidu.com/')
# 5秒钟后关闭浏览器
time.sleep(5)
driver.quit()
示例代码二:打开百度,搜索赵丽颖,点击搜索,查看
from selenium import webdriver
import time
# 1.创建浏览器对象 - 已经打开了浏览器
driver = webdriver.Chrome()
# 2.输入: http://www.baidu.com/
driver.get('http://www.baidu.com/')
# 3.找到搜索框,向这个节点发送文字: 赵丽颖
driver.find_element_by_xpath('//*[@id="kw"]').send_keys('赵丽颖')
# 4.找到 百度一下 按钮,点击一下
driver.find_element_by_xpath('//*[@id="su"]').click()
【1】driver.get(url=url) - 地址栏输入url地址并确认
【2】driver.quit() - 关闭浏览器
【3】driver.close() - 关闭当前页
【4】driver.page_source - HTML结构源码
【5】driver.page_source.find('字符串')
从html源码中搜索指定字符串,没有找到返回:-1,经常用于判断是否为最后一页
【6】driver.maximize_window() - 浏览器窗口最大化
【1】单元素查找('结果为1个节点对象')
1.1) 【最常用】driver.find_element_by_id('id属性值')
1.2) 【最常用】driver.find_element_by_name('name属性值')
1.3) 【最常用】driver.find_element_by_class_name('class属性值')
1.4) 【最万能】driver.find_element_by_xpath('xpath表达式')
1.5) 【匹配a节点时常用】driver.find_element_by_link_text('链接文本')
1.6) 【匹配a节点时常用】driver.find_element_by_partical_link_text('部分链接文本')
1.7) 【最没用】driver.find_element_by_tag_name('标记名称')
1.8) 【较常用】driver.find_element_by_css_selector('css表达式')
【2】多元素查找('结果为[节点对象列表]')
2.1) driver.find_elements_by_id('id属性值')
2.2) driver.find_elements_by_name('name属性值')
2.3) driver.find_elements_by_class_name('class属性值')
2.4) driver.find_elements_by_xpath('xpath表达式')
2.5) driver.find_elements_by_link_text('链接文本')
2.6) driver.find_elements_by_partical_link_text('部分链接文本')
2.7) driver.find_elements_by_tag_name('标记名称')
2.8) driver.find_elements_by_css_selector('css表达式')
【3】注意
当属性值中存在 空格 时,我们要使用 . 去代替空格
页面中class属性值为: btn btn-account
driver.find_element_by_class_name('btn.btn-account').click()
【1】node.send_keys('') - 向文本框发送内容
【2】node.click() - 点击
【3】node.get_attribute('属性名') - 获取节点的属性值
from selenium import webdriver
options = webdriver.ChromeOptions()
# 添加无界面参数
options.add_argument('--headless')
driver = webdriver.Chrome(options=options)
打开百度的高级搜索代码:
from selenium import webdriver
# 导入鼠标事件类
from selenium.webdriver import ActionChains
driver = webdriver.Chrome()
driver.get('http://www.baidu.com/')
# 移动到 设置,perform()是真正执行操作,必须有
element = driver.find_element_by_xpath('//*[@id="u1"]/a[8]')
ActionChains(driver).move_to_element(element).perform()
# 单击,弹出的Ajax元素,根据链接节点的文本内容查找
driver.find_element_by_link_text('高级搜索').click()