Python Selenuim web自动化测试模块简单使用
一、安装selenuim模块
pip install selenium
二、基本使用
1、导入模块
from selenium import webdriver
2、创建一个浏览器对象,如果不在字符串前加r,路径需要使用双斜线\
browser = webdriver.Chrome(r"D:\python_env\python3\Scripts\chromedriver.exe")
谷歌浏览器下载地址: http://chromedriver.storage.googleapis.com/index.html
驱动下载后放在python.exe所在目录后可以不用写完整的路径,如果写完整的路径需要在双引号前加r来屏蔽转义。
浏览器的可执行文件需要提前添加到环境变量中
3、设置加载时间,给浏览器足够的时间将所有页面元素加载完毕,其他等待操作可以使用time包中的sleep()方法实现;
browser.implicitly_wait(10)
4、访问URL,等价于在浏览器地址栏输入地址后访问;
browser.get("https://www.baidu.com")
5、html元素对象定位(重要);
find_element_by_id 通过id定位元素,该方法返回一个元素对象;
driver.find_element_by_id("email").send_keys(r"cy@outlook.com")
find_elements_by_id通过id查找元素,返回一个元素对象列表。虽然html页面中id一般是唯一的,但是selenium依然提供了这个方法,用的很少。
elememts = driver.find_elements_by_id("username") for e in elememts: e.send_keys("11223344")
find_element_by_name通过标签的name属性获取元素对象;
driver.find_element_by_name("password").send_keys("chian")
- find_elements_by_name通过标签的name属性获取元素对象列表;
- find_element_by_tag_name通过标签名定位元素对象,如果有多个只匹配第一个;
- find_elements_by_tag_name通过标签名定位元素对象列表;
- find_element_by_class_name通过标签的类名定位元素对象,如果有多个只匹配第一个,仅支持单类名查找,要查找多个类名的用xpath或css_selector;
- find_elements_by_class_name通过标签的类名定位元素对象列表;
- find_element_by_link_text通过超链接的文本定位元素,如果有同名的返回第一个;
- find_elements_by_link_text通过超链接的文本定位元素列表;
- find_element_by_partial_link_text与find_element_by_link_text类似,只是它是模糊匹配成功后返回元素对象;
- find_elements_by_partial_link_text与find_elements_by_link_text类似,只是它是模糊匹配成功后返回元素对象列表;
- find_element_by_xpath通过path路径定位元素(重要),有通过绝对路径(/)和相对路径(//)两种方式来定位,浏览器插件可以提取这些标识PATH;
复制出来的结果是://[@id="password"],就可以使用driver.find_element_by_xpath('//[@id="password"]'); find_element_by_css_selector通过样式进行元素定位(非常重要,推荐);
# 通过css样式选择器进行元素定位的方式很多,且支持多个class的标签 # 通过标签的路径定位 driver.find_element_by_css_selector("html > body > div > div > div > div > div > form > span > input") driver.find_element_by_css_selector("span > input") # 符号"#"代表使用id匹配,即匹配id为kw的元素 driver.find_element_by_css_selector("#kw") # 符号"."代表使用class名称匹配,即匹配class名称为s_ipt的元素 driver.find_element_by_css_selector(".s_ipt") # 表达式"[属性名称=属性值]"表示按照属性匹配(注意引号的运用) driver.find_element_by_css_selector("[name=wd]") # 任意span下Class名称为s_ipt,Name属性为wd的input元素 driver.find_element_by_css_selector("span > input[class='s_ipt'][name='wd']") #查找
6、 关闭浏览器。
方式一:关闭所有与当前操作相关的窗口,并退出驱动,释放资源(推荐) browser.quit() 方式二:关闭当前窗口 browser.close()
三、常用操作
3.1 浏览器导航栏操作
#后退
driver.back()
#前进
driver.forward()
#刷新
driver.refresh()
3.2 窗口基本操作
#最小化窗口
driver.minimize_window()
#最大化窗口
driver.maximize_window()
#关闭窗口
driver.close()
#将浏览器窗口移动到指定位置
driver.set_window_position(坐标X, 坐标Y)
#将浏览器窗口设置为指定大小
driver.set_window_size(宽度像素, 高度像素)
#将浏览器窗口移动到指定位置,同时设置窗口大小
driver.set_window_rect(坐标X, 坐标Y, 宽度像素, 高度像素)
3.3 获取浏览器信息
# 获取浏览器窗口当前的网址
driver.current_url
# 获取浏览器窗口当前的标题
driver.title
3.4 获取窗口信息
# 获取位置对象
driver.get_window_position()
# 获取大小对象
driver.get_window_size()
# 获取位置及大小对象
driver.get_window_rect()
3.5 鼠标操作
# 对于简单的单击事件只需要调用对象元素的click()方法即可,其他鼠标事件需要导入ActionChains模块
from selenium.webdriver.common.action_chains import ActionChains
from selenium import webdriver
import time
driver = webdriver.Firefox()
driver.get('https://www.baidu.com/')
# 单击操作
right = driver.find_element_by_id("kw")
ActionChains(driver).context_click(right).perform()
# 双击操作
double = driver.find_element_by_id("kw")
ActionChains(driver).double_click(double).perform()
# 拖放操作
#定位源元素
source = driver.find_element_by_id("xx")
#定位目的元素
target = driver.find_element_by_id("xx")
#执行移动操作
ActionChains(driver).drag_and_drop(source,target).perform()
#悬浮操作
above = driver.find_element_by_id("xx")
ActionChains(driver).move_to_element(above).perform()
3.6 键盘操作
from selenium.webdriver.common.keys import Keys
# 操作删除键BackSpace
send_keys(Keys.BACK_SPACE)
# 操作空格键Space
send_keys(Keys.SPACE)
# 操作制表键Tab
send_keys(Keys.TAB)
# 操作回退键Esc
send_keys(Keys.ESCAPE)
# 操作回车键Enter
send_keys(Keys.ENTER)
# 全选(Ctrl+A)
send_keys(Keys.CONTROL,'a')
# 复制(Ctrl+C)
send_keys(Keys.CONTROL,'c')
# 剪切(Ctrl+X)
send_keys(Keys.CONTROL,'x')
# 粘贴(Ctrl+V)
send_keys(Keys.CONTROL,'v')
# 操作F1
send_keys(Keys.F1)
3.7 无头浏览器
from selenium import webdriver
# 设置无窗口
browserOption = webdriver.ChromeOptions()
browserOption.headless = True
# 声明浏览器对象
driver = webdriver.Chrome(options=browserOption)
# 访问页面
driver.get("http://www.baidu.com")
3.8 其他浏览器参数
# 启动就最大化
--start-maximized
# 指定用户文件夹 User Data 路径,可以把书签这样的用户数据保存在系统分区以外的分区
–-user-data-dir=”[PATH]”
# 指定缓存Cache路径
–-disk-cache-dir=”[PATH]“
# 指定Cache大小,单位Byte
–-disk-cache-size=100
# 隐身模式启动
–-incognito
# 禁用Javascript
–-disable-javascript
# 禁止加载所有插件,可以增加速度
--disable-plugins
# 禁用JavaScript
--disable-javascript
# 禁用弹出拦截
--disable-popup-blocking
# 禁用插件
--disable-plugins
# 禁用图像
--disable-images
# 设置代理
--proxy-server=http://ip:port
3.9 标签页切换
from selenium import webdriver
import time
driver = webdriver.Chrome(r"D:\python_env\python3\Scripts\chromedriver.exe")
# 等待10s加载完所有元素
driver.implicitly_wait(10)
driver.get("http://172.31.1.99/test.html")
time.sleep(2)
# 新增一个标签页
driver.execute_script('window.open()')
time.sleep(2)
# 打印标签页
print(driver.window_handles)
# 切换至标签页1(当前标签页为0)
driver.switch_to.window(driver.window_handles[1])
time.sleep(2)
# 在当前标签页访问知乎
driver.get("http://www.zhihu.com")
time.sleep(2)
driver.quit()