介绍
Selenium是用于测试网站的自动化测试工具,支持Chrome、Firefox、Safari浏览器,也支持phantomJS无界面浏览器。
支持系统有:Windows、Linux、IOS、Android
安装
pip install Selenium
安装浏览器驱动
Selenium3.x调用浏览器须下载webdriver驱动文件,下载或将文件放入python安装目录Scripts下机行。
Chrome驱动下载:点击下载chromedrive Firefox驱动下载:点解下载geckodriver
开始使用
1.调用浏览器
from selenium import webdriver
browser = webdriver. Firefox( )
browser. get( "http://www.baidu.com" )
w_id = browser. find_element_by_id( "kw" )
w_id. send_keys( "selenium" )
browser. find_element_by_id( "su" ) . click( )
browser. close( )
browser. quit( )
2.Selenium的8种定位方式
定位一个元素 含义 find_element_by_id 通过元素id定位 find_element_by_name 元素name定位 find_element_by_xpath xpath表达式定位 find_element_by_link_text 完整超链接定位 find_element_by_partial_link_text 部分链接定位 find_element_by_tag_name 标签定位 find_element_by_class_name 类名进行定位 find_elements_by_css_selector css选择器进行定 **!!! 定位多个元素:**在element + s 就行
3. 控制浏览器操作方法
方法 说明 set_window_size() 设置浏览器的大小 back() 控制浏览器后退 forward() 控制浏览器前进 refresh() 刷新当前页面 clear() 清除文本 send_keys (value) 模拟按键输入 click() 单击元素 submit() 用于提交表单 get_attribute(name) 获取元素属性值 is_displayed() 设置该元素是否用户可见 size 返回元素的尺寸 text 获取元素的文本
4. 鼠标事件
方法 说明 ActionChains(driver) 构造ActionChains对象 context_click() 右击 double_click() 双击 drag_and_drop(source, target) 拖动 move_to_element() 鼠标悬停 move_to 移动 perform() 执行所有ActionChains中存储的行为
如:
from selenium import webdriver
from selenium. webdriver. common. action_chains import ActionChains
driver = webdriver. Chrome( )
driver. get( "url" )
right_click = driver. find_element_by_id( "id" )
ActionChains( driver) . context_click( right_click) . perform( )
5.键盘事件
模拟键盘按键 说明 send_keys(Keys.BACK_SPACE) 删除键(BackSpace) send_keys(Keys.SPACE) 空格键(Space) send_keys(Keys.TAB) 制表键(Tab) send_keys(Keys.ESCAPE) 回退键(Esc) send_keys(Keys.ENTER) 回车键(Enter)
组合键
模拟键盘按键 说明 send_keys(Keys.CONTROL,‘a’) 全选(Ctrl+A) send_keys(Keys.CONTROL,‘c’) 复制(Ctrl+C) send_keys(Keys.F1…Fn) 键盘 F1…Fn
7. 获取断言信息
属性 说明 title 用于获得当前页面的标题 current_url 用户获得当前页面的URL text 获取搜索条目的文本信息
8.设置元素等待
显式等待
from selenium import webdriver
from selenium. webdriver. common. by import By
from selenium. webdriver. support. ui import WebDriverWait
from selenium. webdriver. support import expected_conditions as EC
driver = webdriver. Firefox( )
driver. get( "http://www.baidu.com" )
element = WebDriverWait( driver, 5 , 0.5 ) . until(
EC. presence_of_element_located( ( By. ID, "kw" ) )
)
element. send_keys( 'selenium' )
driver. quit( )
WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)
driver :浏览器驱动。
timeout :最长超时时间,默认以秒为单位。
poll_frequency :检测的间隔(步长)时间,默认为0.5S。
ignored_exceptions :超时后的异常信息,默认情况下抛NoSuchElementException异常。
until(method, message=‘’)
调用该方法提供的驱动程序作为一个参数,直到返回值为True。
until_not(method, message=‘’)
调用该方法提供的驱动程序作为一个参数,直到返回值为False。
隐式等待
隐式等待,是设置的全局等待。设置等待时间,是对页面中的所有元素设置加载时间,如果超出了设置时间的则抛出异常。
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from time import ctime
driver = webdriver.Firefox()
# 设置隐式等待为10秒
driver.implicitly_wait(10)
driver.get("http://www.baidu.com")
try:
print(ctime())
driver.find_element_by_id("kw22").send_keys('selenium')
except NoSuchElementException as e:
print(e)
finally:
print(ctime())
driver.quit()
9.多表单切换
方法 说明 switch_to.frame() 将当前定位的主体切换为frame/iframe表单的内嵌页面中 switch_to.default_content() 跳回最外层的页面
10.多窗口切换
方法 说明 current_window_handle 获得当前窗口句柄 window_handles 返回所有窗口的句柄到当前会话 switch_to.window(句柄) 切换到相应的窗口
11.警告框处理
方法 说明 text 返回 alert/confirm/prompt 中的文字信息 accept() 接受现有警告框 dismiss() 解散现有警告框 send_keys(keysToSend) 发送文本至警告框。keysToSend:将文本发送至警告框。
from selenium import webdriver
from selenium. webdriver. common. action_chains import ActionChains
import time
driver = webdriver. Firefox( )
driver. implicitly_wait( 10 )
driver. get( 'http://www.baidu.com' )
link = driver. find_element_by_xpath( "//*/span[text()='设置']" )
ActionChains( driver) . move_to_element( link) . perform( )
driver. find_element_by_link_text( "搜索设置" ) . click( )
driver. find_element_by_class_name( "prefpanelgo" ) . click( )
time. sleep( 2 )
driver. switch_to. alert. accept( )
driver. quit( )
12.下拉框选择
from selenium. webdriver. support. select import Select
方法 说明 select_by_value(“选择值”) select标签的value属性的值 select_by_index(“索引值”) 下拉框的索引 select_by_visible_testx(“文本值”) 下拉框的文本值
from selenium import webdriver
from selenium. webdriver. support. select import Select
from time import sleep
driver = webdriver. Chrome( )
driver. implicitly_wait( 10 )
driver. get( 'http://www.baidu.com' )
link = driver. find_element_by_xpath( "//*/span[text()='设置']" )
sleep( 1 )
driver. find_element_by_link_text( "搜索设置" ) . click( )
sleep( 2 )
sel = driver. find_element_by_xpath( "//select[@id='nr']" )
Select( sel) . select_by_value( '50' )
driver. quit( )
13.文件上传
通过send_keys()方法来实现文件上传
driver. find_element_by_name( "file" ) . send_keys( 'D:\\upload_file.txt' )
14.cookie操作
方法 说明 get_cookies() 获得所有cookie信息 get_cookie(name) 返回字典的key为“name”的cookie信息 add_cookie(cookie_dict) 添加cookie。“cookie_dict”指字典对象,必须有name 和value 值 delete_cookie(name,optionsString) 删除cookie信息。“name”是要删除的cookie的名称,“optionsString”是该cookie的选项,目前支持的选项包括“路径”,“域” delete_all_cookies() 删除所有cookie信息
from selenium import webdriver
driver = webdriver. Firefox( )
driver. get( "http://www.youdao.com" )
cookie= driver. get_cookies( )
print ( cookie)
driver. add_cookie( { 'name' : 'name' , 'value' : 'value' } )
for cookie in driver. get_cookies( ) :
print ( "%s -> %s" % ( cookie[ 'name' ] , cookie[ 'value' ] ) )
driver. quit( )
15.调用JavaScript代码
execute_script()方法执行JavaScript代码
js= "window.scrollTo(100,450);"
driver. execute_script( js)
16.窗口截图
方法 说明 get_screenshot_as_file(self, filename) 用于截取当前窗口,并把图片保存到本地
driver. get_screenshot_as_file( "D:\\img.jpg" )
17.关闭浏览器
方法 说明 close() 关闭单个窗口 quit() 关闭所有窗口