简介
Selenium是广泛使用的模拟浏览器运行的库,它是一个用于Web应用程序测试的工具。 Selenium测试直接运行在浏览器中,就像真正的用户在操作一样,并且支持大多数现代 Web 浏览器。
一、环境安装
** 1.selenium安装**
通过pip安装
pip3 install selenium
** 2.安装浏览器驱动**
针对不同的浏览器,需要安装不同的驱动,下面以安装 Chrome 驱动作为演示
** 2.1确认浏览器版本**
在Chrome浏览器网址输入框 输入chrome://version/ 查看浏览器版本
** 2.2打开下载Chrome驱动网页**
** **找到对应版本,链接已经为大家准备好了,
CNPM Binaries Mirrorhttps://registry.npmmirror.com/binary.html?path=chrome-for-testing
**根据自己系统下载**
这里我下载的是 Win64位 chromedriver-win64.zip
下载完成后只有一个exe文件,保存到合适位置,并把当前路径保存到环境变量,添加成功后使用代码进行测试
这里我们就安装驱动成功了
二、基础用法
1.对页面进行操作
1.1初始化浏览器对象
from selenium import webdriver
# 加载web驱动工具,使用绝对路径加载
test_webdriver = webdriver.Chrome(service=Service(r'D:\workspace\utils\chromedriver-win64\chromedriver.exe'))
1.2访问页面
进行页面访问使用的是get方法,传入参数为待访问页面的URL地址即可。
from selenium import webdriver
test_webdriver = webdriver.Chrome(service=Service(r'D:\workspace\utils\chromedriver-win64\chromedriver.exe'))
#使用get方法访问页面
test_webdriver.get('https://www.baidu.com/')
1.3设置浏览器大小
set_window_size()方法可以用来设置浏览器大小,而maximize_window则是设置浏览器为全屏
from selenium import webdriver
import time
test_webdriver = webdriver.Chrome(service=Service(r'D:\workspace\utils\chromedriver-win64\chromedriver.exe'))
# 设置浏览器大小:全屏
test_webdriver.maximize_window()
test_webdriver.get('https://www.baidu.com/')
time.sleep(2)
# 设置分辨率 500*500
test_webdriver.set_window_size(500,500)
time.sleep(2)
1.4浏览器前进后退以及刷新
from selenium import webdriver
import time
test_webdriver = webdriver.Chrome(service=Service(r'D:\workspace\utils\chromedriver-win64\chromedriver.exe'))
test_webdriver.get('https://image.baidu.com/')
print("打开百度新闻页面")
time.sleep(5)
# 刷新页面
test_webdriver.refresh()
time.sleep(5)
# 返回百度首页
test_webdriver.back()
print('返回至百度首页')
time.sleep(5)
# 前进百度页面
test_webdriver.forward()
print('前进至百度新闻页')
1.5 获取页面基础属性
from selenium import webdriver
import time
test_webdriver = webdriver.Chrome(service=Service(r'D:\workspace\utils\chromedriver-win64\chromedriver.exe'))
test_webdriver.get('https://image.baidu.com/')
#网页标题
print(test_webdriver.title)
# 当前网址
print(test_webdriver.current_url)
# 浏览器名称
print(test_webdriver.name)
# 网页源码
print(test_webdriver.page_source)
2.定位页面元素
以我们熟知的 百度为例,我们进入首页,按 【F12】 进入开发者工具。红框中显示的就是页面的代码,我们要做的就是从代码中定位获取我们需要的元素。
我们在实际使用浏览器的时候,很重要的操作有输入文本、点击确定等等。对此,Selenium提供了一系列的方法来方便我们实现以上操作。通过webdriver对象的** find_element(by=“属性名”, value=“属性值”)**,主要包括以下这八种。
属性函数CLASSfind_element(by=By.CLASS_NAME, value=‘’)XPATHfind_element(by=By.XPATH, value=‘’)LINK_TEXTfind_element(by=By.LINK_TEXT, value=‘’)PARTIAL_LINK_TEXTfind_element(by=By.PARTIAL_LINK_TEXT, value=‘’)TAGfind_element(by=By.TAG_NAME, value=‘’)CSSfind_element(by=By.CSS_SELECTOR, value=‘’)IDfind_element(by=By.ID, value=‘’)
百度举例
可以看到这个对应的class,name以及id分别是这些,通过以下语句都可以定位到这个元素
from selenium import webdriver
from selenium.webdriver.common.by import By
test_webdriver= webdriver.Chrome()
test_webdriver.get('https://www.baidu.com')
element=test_webdriver.find_element(by=By.CLASS_NAME,value='s_ipt')
element=test_webdriver.find_element(by=By.ID,value='kw')
3.模拟鼠标操作
这里需要导入ActionChains 类
from selenium.webdriver.common.action_chains import ActionChains
3.1鼠标事件
页面交互操作
操作
函数单击click()右击context_click()双击double_click()拖拽double_and_drop()悬停move_to_element()执行perform()
4.键盘事件
引入keys类
from selenium.webdriver.common.keys import Keys
4.1常用操作
操作函数删除键send_keys(Keys.BACK_SPACE)空格键send_keys(Keys.SPACE)制表键send_keys(Keys.TAB)回退键send_keys(Keys.ESCAPE)回车send_keys(Keys.ENTER)全选send_keys(Keys.CONTRL,‘a’)复制send_keys(Keys.CONTRL,‘c’)剪切send_keys(Keys.CONTRL,‘x’)粘贴send_keys(Keys.CONTRL,‘v’)键盘F1send_keys(Keys.F1)
5.延时等待
5.1强制等待
首先引入time工具
import time
也就是常说的睡眠, 直接time.sleep(n),n为等待的时间,在执行get方法后执行
5.2 隐式等待
implicitly_wait()设置等待时间,如果到时间有元素节点没有加载出来,就会抛出异常
5.3 显式等待
设置一个等待时间和一个条件,在规定时间内,每隔一段时间查看下条件是否成立,如果成立那么程序就继续执行,否则就抛出一个超时异常,
5.3.1WebDriverWait的参数说明:
WebDriverWait( driver,timeout,poll_frequency=0.5,ignored_exceptions=None)
driver: 浏览器驱动
timeout: 超时时间,等待的最长时间(同时要考虑隐性等待时间)
poll_frequency: 每次检测的间隔时间,默认是0.5秒
ignored_exceptions:超时后的异常信息,默认情况下抛出NoSuchElementException异常
5.3.2 WebDriverWait的方法说明:
until(method,message=‘’)
method: 在等待期间,每隔一段时间调用这个传入的方法,直到返回值不是False
message: 如果超时,抛出TimeoutException,将message传入异常
until_not(method,message=‘’): 与until相反,until是当某元素出现或什么条件成立则继续执行,until_not是当某元素消失或什么条件不成立则继续执行,参数也相同。
有哪些方法呢?
from selenium.webdriver.support import expected_conditions as EC
# 判断标题是否和预期的一致
title_is
# 判断标题中是否包含预期的字符串
title_contains
# 判断指定元素是否加载出来
presence_of_element_located
# 判断所有元素是否加载完成
presence_of_all_elements_located
# 判断某个元素是否可见. 可见代表元素非隐藏,并且元素的宽和高都不等于0,传入参数是元组类型的locator
visibility_of_element_located
# 判断元素是否可见,传入参数是定位后的元素WebElement
visibility_of
# 判断某个元素是否不可见,或是否不存在于DOM树
invisibility_of_element_located
# 判断元素的 text 是否包含预期字符串
text_to_be_present_in_element
# 判断元素的 value 是否包含预期字符串
text_to_be_present_in_element_value
#判断frame是否可切入,可传入locator元组或者直接传入定位方式:id、name、index或WebElement
frame_to_be_available_and_switch_to_it
#判断是否有alert出现
alert_is_present
#判断元素是否可点击
element_to_be_clickable
# 判断元素是否被选中,一般用在下拉列表,传入WebElement对象
element_to_be_selected
# 判断元素是否被选中
element_located_to_be_selected
# 判断元素的选中状态是否和预期一致,传入参数:定位后的元素,相等返回True,否则返回False
element_selection_state_to_be
# 判断元素的选中状态是否和预期一致,传入参数:元素的定位,相等返回True,否则返回False
element_located_selection_state_to_be
#判断一个元素是否仍在DOM中,传入WebElement对象,可以判断页面是否刷新了
6.窗口切换
在 selenium 操作页面的时候,可能会因为点击某个链接而跳转到一个新的页面(打开了一个新标签页),这时候 selenium 实际还是处于上一个页面的,需要我们进行切换才能够定位最新页面上的元素。
** 窗口切换需要使用 switch_to.windows() 方法。**
假如上面代码在点击跳转后,使用 switch_to 切换窗口,window_handles 返回的 handle 列表是按照页面出现时间进行排序的,最新打开的页面肯定是最后一个,这样用 test_webdriver.window_handles[-1] + switch_to 即可跳转到最新打开的页面了。
windows = test_webdriver.window_handles
test_webdriver.switch_to.window(windows[1])
那如果打开的窗口有多个,如何跳转到之前打开的窗口,如果确实有这个需求,那么打开窗口是就需要记录每一个窗口的 key(别名) 与 value(handle),保存到字典中,后续根据 key 来取 handle
版权归原作者 礼礼礼礼礼礼 所有, 如有侵权,请联系我们删除。