Selenium 3.14中文API For Python - WebDriver(一) - 方法

Selenium 3.14中文API - WebDriver For Python(一) - 方法

转载链接:https://www.cooooder.com/archives/20201224

class WebDriver

通过命令发送到远程服务器来控制浏览器

加载浏览器驱动(获取WebDriver实例,以Chrome为例)
# 加载浏览器驱动,打开一个页面
from selenium import webdriver
driver = webdriver.Chrome()

方法

add_cookie
  • 功能:将cookie加入到当前会话
  • 参数:字典类型的对象
driver.add_cookie({'currentName':'edward'})
driver.add_cookie({'currentUrl':'https://www.cooooder.com'})
add_js_error_listener
  • 功能:监听JavaScript报错,当contextmanager退出时,检查是否存在JS错误
  • 参数:-
async with driver.add_js_error_listener() as error:
    driver.find_element(By.ID, "throwing-mouseover").click()
assert error is not None
assert error.exception_details.stack_trace.call_frames[0].function_name == "onmouseover"
add_listener
  • 功能:监听事件
  • 参数:待查看的事件类型
async with driver.add_listener(Console.log) as messages:
    driver.execute_script("console.log('hello world')")
assert messages["message"] == "hello world"
back
  • 功能:浏览器后退一页
  • 参数:-
driver.back()
close
  • 功能:关闭当前窗口
  • 参数:-
driver.close()
create_web_element
  • 功能:使用一个指定的element_id创建一个Web元素(注:并不能在当前页面添加DOM元素,如果你想创建DOM元素,可以使用execute_script(js_code)调用js语句创建)
  • 参数:element_id
driver.create_web_element("test")
delete_all_cookies
  • 功能:删除当前会话中的所有cookie
  • 参数:-
driver.delete_all_cookies()
delete_cookie
  • 功能:根据名称删除指定的cookie
  • 参数:cookie的名称
driver.delete_cookie('user_name')
execute
  • 功能:发送一条被command.CommandExecutor执行的命令
  • 参数:
    • driver_command: 命令的名称,作为字符串执行,参考 Selenium API - Command
    • params= None: 字典类型的参数,与命令一起发送
driver.execute('goBack')
driver.execute('goForward')
driver.execute('addCookie', {'current_name':'administrator'})
execute_async_script
  • 功能:当前窗口异步执行JavaScript
  • 参数:
    • script:JavaScript语句
    • *args:JavaScript语句所需要的参数
script = "var callback = arguments[arguments.length - 1]; " \
         "window.setTimeout(function(){ callback('timeout') }, 3000);"
driver.execute_async_script(script)
execute_script
  • 功能:当前窗口同步执行JavaScript
  • 参数:
    • script:JavaScript语句
    • *args:JavaScript语句所需要的参数
driver.execute_script('return document.title;')
file_detector_context
  • 功能:覆盖当前的文件监测器
  • 参数:
    • file_detector_class
    • args
    • kwargs
find_element_by_id()
  • 功能:根据id定位一个元素
  • 参数:id(id在HTML文档中是唯一的)
  • 返回:WebElement
# 例如:<input id="username" placeholder="请输入用户名"/> -> username
find_element_by_id('username')
find_element_by_name()
  • 功能:根据name定位一个元素
  • 参数:name(name在HTML文档用来指定元素的名称)
  • 返回:WebElement
# 例如:<input name="userpass" /> -> userpass
find_element_by_name('userpass')
find_element_by_tag_name()
  • 功能:根据HTML元素标签名称定位一个元素
  • 参数:HTML标签名称
  • 返回:WebElement
# 例如:<span></span> -> span
find_element_by_tag_name('span')
find_element_by_class_name()
  • 功能:根据class来定位元素定位一个元素
  • 参数:class用来指定HTML元素的类名
  • 返回:WebElement
# 例如:<span class="title">xxxx标题</span> -> title
find_element_by_class_name('title')
find_element_by_link_text()
  • 功能:根据文本链接来定位元素定位一个元素(专门针对标签)
  • 参数:的文本内容
  • 返回:WebElement
# 例如:<a href="www.baidu.com">跳转百度页面</a>
find_element_by_link_text('跳转百度页面')
find_element_by_partial_link_text()
  • 功能:find_element_by_link_text 的补充,部分文本定位一个元素
  • 参数:的部分文本内容
  • 返回:WebElement
# 例如:<a href="www.baidu.com">跳转百度页面</a>
find_element_by_partial_link_text('跳转百度')
find_element_by_xpath()
  • 功能:xpath是一种定位元素的语言,有多种定位策略定位一个元素
  • 参数:具体看示例
  • 返回:WebElement
# xpath是一种定位元素的语言,有多种定位策略
#<html>
#<body>
# <div>
#   <div class="username">
#       <span>用户名:</span>
#       <input name="inputs" type="text" placeholder="请输入用户名"/>
#   </div>
#   <div class="userpass">
#       <span>密码:</span>
#       <input id="pass" name="inputs" placeholder="请输入用户密码"/>
#   </div>
#</div>
#</body>
#</html>
# 获取密码输入框
# 1. 绝对路径定位,根据标签代码的层级结构定位
find_element_by_xpath("/html/body/div/div[2]/input") 

# 2. 利用元素属性定位
find_element_by_xpath("//input[@placeholder='请输入用户密码']")

# 3. 层级与属性结合
find_element_by_xpath("//div[@class='userpass']/input")

# 4. 使用逻辑运算符,连接多个属性
find_element_by_xpath("//input[@name='inputs' and @id='pass']")

# 5. 使用contains方法,格式:contains(@元素,模糊匹配值)
find_element_by_xpath("//div[contains(@class,'pass')]/input")

# 6. 使用text()方法
# 获取密码输入框前面的文字标签元素
find_element_by_xpath("//span[text(),'密码:']")
find_element_by_xpath("//span[contains(text(),'密码'])")
find_element_by_css_selector()
  • 功能:根据CSS选择器定位一个元素
  • 参数:具体看示例
  • 返回:WebElement
# CSS是描述HTML样式的语言,CSS使用选择器为元素绑定属性
# 选择器:通常定位样式格式 'xxxx {样式}',xxxx就是选择器,选择器指明了{}中样式的作用对象,也就是样式作用于HTML页面中的哪些元素
# CSS定位速度比XPath定位的速度快
选择器 示例 描述
.class .username class选择器,选择class='username’的所有元素
#id #userpass id选择器,选择id="userpass"的所有元素
* * 选择所有元素
element span 选择所有<span>元素
element > element div > span 选择父元素为 <div> 的所有span元素
element + element span + input 选择同一级中紧接在<span>元素之后的所有<input>元素
[attribute=value] [placeholder=请输入用户名] 选择 placeholder='请输入用户名’的所有元素
#<html>
#<body>
# <div>
#   <div class="username">
#       <span>用户名:</span>
#       <input name="inputs" type="text" placeholder="请输入用户名"/>
#   </div>
#   <div class="userpass">
#       <span>密码:</span>
#       <input id="pass" name="inputs" placeholder="请输入用户密码"/>
#   </div>
#</div>
#</body>
#</html>

# 1. class定位
# <style>
#     .username {
#         color: '#000000'
#     }
# </style>
# 点号(.)表示通过class定位元素
find_element_by_css_selector(".username")

# 2. id定位
# <style>
#     #userpass {
#         color: '#000000'
#     }
# </style>
# 井号(#)表示通过id来定位元素
find_element_by_css_selector("#userpass")

# 3. 标签名定位
# <style>
#     span {
#         color: '#000000'
#     }
# </style>
# 直接使用标签名称定位
find_element_by_css_selector("span")

# 4. 标签层级关系定位
# <style>
#     div > span {
#         color: '#000000'
#     }
# </style>
# 查找div中所有元素标签名为span的子元素
find_element_by_css_selector("div > span")

# 5. 通过属性定位
# 可以使用元素的任意属性定位
find_element_by_css_selector("[placeholder=请输入用户名]")
find_element_by_css_selector("[name=inputs]")

# 6. 组合定位
# 可以将上面的定位策略组合起来使用,大大加强了定位元素的唯一性
# 定位input标签,id属性为pass,它的父元素为div标签,class属性为userpass,通过以上条件定位元素
find_element_by_css_selector('div.userpass > input#pass')

其它更多定位参考:CSS选择器参考手册

find_element()
  • 功能:find_element_by_* 方法的简写调用
  • 参数:
    • by= “id” 借助 By 来传入定位方式
    • value= None 定位语句,参考find_element_by_*方法的参数
  • 返回:WebElement
driver.find_element(By.ID, "userpass")
driver.find_element(By.TAG_NAME, "span")
By
定位方式 By
id By.ID
name By.NAME
class_name By.CLASS_NAME
tag_name By.TAG_NAME
link_text By.LINK_TEXT
partial_link_text By.PARTIAL_LINK_TEXT
css_selector By.CSS_SELECTOR
xpath By.XPATH
find_elements_by_name()
  • 功能:与 find_element_by_name() 使用方式相同,只是返回多个元素
  • 返回:List of WebElement
find_elements_by_xpath()
find_elements_by_link_text()
find_elements_by_partial_link_text()
find_elements_by_tag_name()
find_elements_by_class_name()
find_elements_by_css_selector()
find_elements()
  • 功能:find_elements_by_* 方法的简写调用,与 find_element() 使用方式相同
  • 参数:
    • by= “id” 借助 By 来传入定位方式
    • value= None 定位语句,参考find_elements_by_*方法的参数
  • 返回:List of WebElement
forward()
  • 功能:根据浏览器历史向前一页
  • 参数:-
driver.forward()
fullscreen_window()
  • 功能:浏览器全屏
  • 参数:-
driver.fullscreen_window()
get()
  • 功能:在当前浏览器会话中打开加载一个网页
  • 参数:url 网页地址
driver.get('https://www.cooooder.com')
get_cookie()
  • 功能:根据名称获取对应的cookie对象
  • 参数:cookie_name cookie的名称
  • 返回:字典类型 {‘key’:‘value’},如果没有找到返回None
driver.get_cookie('current_name')
get_cookies()
  • 功能:获取所有的cookie
  • 参数:-
  • 返回:字典集合类型
# [{'current_name':'admin'},{'current_role':'admin'}]
driver.get_cookies()
get_log()
  • 功能:获取给定类型的日志
  • 参数:log_type
driver.get_log('browser')
driver.get_log('driver')
driver.get_log('client')
driver.get_log('server')
get_screenshot_as_base64()
  • 功能:获取浏览器当前窗口截图,以Base64图片格式返回
  • 参数:-
  • 返回:base64 字符串
base_str = driver.get_screenshot_as_base64()
get_screenshot_as_file()
  • 功能:浏览器当前窗口截图保存为PNG图片
  • 参数:filepath 图片保存全路径
  • 返回:布尔类型 True成功,False失败
driver.get_screenshot_as_file('/Screenshots/screenshot.png')
get_screenshot_as_png()
  • 功能:获取浏览器当前窗口截图,以二进制数据格式返回
  • 参数:-
  • 返回:二进制数据
driver.get_screenshot_as_png()
get_window_position()
  • 功能:获取当前窗口x,y坐标
  • 参数:-
  • 返回:字典类型,例如:{‘x’: 10, ‘y’: 10}
driver.get_window_position()
get_window_rect()
  • 功能:获取当前窗口x,y坐标,以及当前窗口的高度和宽度
  • 参数:-
  • 返回:字典类型,例如:{‘height’: 718, ‘width’: 1050, ‘x’: 10, ‘y’: 10}
driver.get_window_rect()
get_window_size()
  • 功能:获取当前窗口的高度和宽度
  • 参数:-
  • 返回:字典类型,例如:{‘width’: 1050, ‘height’: 718}
driver.get_window_size()
implicitly_wait()
  • 功能:设置超时,隐式等待找到元素
  • 参数:超时时间(s)
driver.implicitly_wait(10)
等待的几种方式对比
  • 强制等待
    • sleep(second) 强制等待n秒
  • 隐式等待
    • implicitly_wait(second) 整个driver生命周期设置一个最长等待时间,如果再规定时间内加载完成则执行下一步,否则一直等到时间截止,然后执行下一步
  • 显式等待
    • WebDriverWait 配合该类的until()和until_not()方法,可以根据条件灵活的等待
maximize_window()
  • 功能:当前浏览器窗口最大化
  • 参数:-
driver.maximize_window()
minimize_window()
  • 功能:当前浏览器窗口最小化
  • 参数:-
driver.minimize_window()
pin_script()
  • 功能:常用脚本固定在会话上,可以有效的直接调用
  • 参数:script
quit()
  • 功能:退出驱动,并关闭每个关联的窗口
  • 参数:-
driver.quit()
refresh()
  • 功能:刷新当前页面
  • 参数:-
driver.refresh()
save_screenshot()
  • 功能:将当前窗口截屏保存为PNG格式图片
  • 参数:保存的图片路径
  • 返回:True 保存成功;False IO异常,保存失败
dirver.save_screenshot('/screenshots/raspberrypi.png')
set_page_load_timeout()
  • 功能:设置页面加载完成等待的时间
  • 参数:等待时间(s)
driver.set_page_load_timeout(10)
set_script_timeout()
  • 功能:设置脚本执行过程中等待的时间
  • 参数:等待时间(s)
driver.set_script_timeout(10)
set_window_position()
  • 功能:设置当前窗口的x、y位置
  • 参数:x:x坐标(像素为单位);y:y坐标(像素为单位)
driver.set_window_position(10, 10)
set_window_rect()
  • 功能:设置当前窗口的x、y坐标以及当前窗口的高度和宽度
  • 参数:(x = None,y = None,width = None,height = None )
driver.set_window_rect(x=10, y=10, width=100, height=150)
set_window_size()
  • 功能:设置当前窗口的宽度和高度
  • 参数:width:宽度(像素为单位);height:高度(像素为单位)
driver.set_window_size(1024, 768)
start_client()
  • 功能:在开启新会话之前执行,用来重写此方法自定义启动前执行的方法
  • 参数:-
start_session()
capabilities = DesiredCapabilities.FIREFOX.copy()
capabilities['platform'] = "WINDOWS"
capabilities['version'] = "10"
driver.start_session(capabilities)
DesiredCapabilities.object:
CHROME = {'browserName': 'chrome', 'platform': 'ANY', 'version': ''}
EDGE = {'browserName': 'MicrosoftEdge', 'platform': 'ANY', 'version': ''}
FIREFOX = {'acceptInsecureCerts': True, 'browserName': 'firefox'}
HTMLUNIT = {'browserName': 'htmlunit', 'platform': 'ANY', 'version': ''}
HTMLUNITWITHJS = {'browserName': 'htmlunit', 'javascriptEnabled': True, 'platform': 'ANY', 'version': 'firefox'}
INTERNETEXPLORER = {'browserName': 'internet explorer', 'platform': 'WINDOWS', 'version': ''}
IPAD = {'browserName': 'iPad', 'platform': 'MAC', 'version': ''}
IPHONE = {'browserName': 'iPhone', 'platform': 'MAC', 'version': ''}
OPERA = {'browserName': 'opera', 'platform': 'ANY', 'version': ''}
SAFARI = {'browserName': 'safari', 'platform': 'MAC', 'version': ''}
WEBKITGTK = {'browserName': 'MiniBrowser', 'platform': 'ANY', 'version': ''}
WPEWEBKIT = {'browserName': 'MiniBrowser', 'platform': 'ANY', 'version': ''}
stop_client()
  • 功能:执行退出命令后调用,用来重写此方法自定义关闭后执行的方法
  • 参数:-
unpin()
  • 功能:删除固定的脚本
  • 参数:ScriptKey key

相关API快捷导航

转载链接:https://www.cooooder.com/archives/20201224

猜你喜欢

转载自blog.csdn.net/zszangy/article/details/111614245
今日推荐