WebDriver 提供的 set_window_size()方法可以用来设置浏览器窗口大小。
"""
* name → find_element_by_name()
* tag_name → find_element_by_tag_name()
* class_name → find_element_by_class_name()
* link_text → find_element_by_link_text()
* partial_link_text → find_element_by_partial_link_text()
* xpath → find_element_by_xpath()
* css_selector → find_element_by_css_selector()
"""
from selenium import webdriver
driver = webdriver.Chrome()
# id 定位
driver.find_element_by_id("kw")
driver.find_element_by_id("su")
# name 定位
driver.find_element_by_name("wd")
# class 定位
driver.find_element_by_class_name("s_ipt")
# tag定位
driver.find_element_by_tag_name("input")
# link text定位
driver.find_element_by_link_text("新闻")
driver.find_element_by_link_text("hao123")
driver.find_element_by_link_text("地图")
driver.find_element_by_link_text("视频")
driver.find_element_by_link_text("贴吧")
# partial link定位
driver.find_element_by_partial_link_text("一个很长的")
driver.find_element_by_partial_link_text("文本链接")
# XPath 定位
# 1、绝对路径定位
driver.find_element_by_xpath("/html/body/div/div[2]/div/div/div/from/span/input")
driver.find_element_by_xpath("/html/body/div/div[2]/div/div/div/from/span[2]/input")
# 2、利用元素属性定位
driver.find_element_by_xpath("//input[@id='kw']")
driver.find_element_by_xpath("//input[@id='su']")
driver.find_element_by_xpath("//*[@name='wd']")
driver.find_element_by_xpath("//*[@class='s_ipt']")
driver.find_element_by_xpath("//input[@maxlength='100']")
driver.find_element_by_xpath("//input[@autocomplete='off']")
driver.find_element_by_xpath("//input[@type='submit']")
# 3、层级与属性结合
driver.find_element_by_xpath("//span[@class='bg s_ipt_wr']/input")
driver.find_element_by_xpath("//form[@id='form']/span/input")
driver.find_element_by_xpath("//form[@id='form']/span[2]/input")
# 4、使用逻辑运算符
driver.find_element_by_xpath("//input[@id='kw' and @class='s_ipt']")
# 5、使用contains方法
driver.find_element_by_xpath("//span[contains(@calss,'s_ipt_wr')]/input")
# 6、使用text()方法
driver.find_element_by_xpath("//a[text(),'新闻')]")
driver.find_element_by_xpath("//a[contains(text(),'一个很长的')]")
# CSS 定位
# 1.通过class属性定位
driver.find_element_by_css_selector(".s_ipt")
driver.find_element_by_css_selector(".s_btn")
# 2、通过id属性定位
driver.find_element_by_css_selector("#kw")
driver.find_element_by_css_selector("#su")
# 3、通过标签名定位
driver.find_element_by_css_selector("input")
# 4、通过标签层级关系定位
driver.find_element_by_css_selector("span > input")
# 5、通过属性定位
driver.find_element_by_css_selector("[autocomplete=off]")
driver.find_element_by_css_selector("[name='kw']")
driver.find_element_by_css_selector('[type="submit"]')
# 6、组合定位
driver.find_element_by_css_selector("form.fm > span > input.s_ipt")
driver.find_element_by_css_selector("form#form > span > input#kw")
# 7、更多定位用法
driver.find_element_by_css_selector("[class*=s_ipt_wr]")
driver.find_element_by_css_selector("[class^=bg]")
driver.find_element_by_css_selector("[class$=wrap]")
driver.find_element_by_css_selector("form > input:nth-child(2)")
"""
* back() 后退
* forward() 前进
* refresh() 刷新
"""
from selenium import webdriver
driver = webdriver.Chrome()
# 访问百度首页
first_url = 'http://www.baidu.com'
print("now access %s" %(first_url))
driver.get(first_url)
# 访问新闻页面
second_url = 'http://news.baidu.com'
print("now access %s" %(second_url))
driver.get(second_url)
# 返回(后退)到百度首页
print("back to %s " %(first_url))
driver.back()
# 前进到新闻页
print("forward to %s" %(second_url))
driver.forward()
driver.refresh() # 刷新当前页面
driver.quit()
"""
* set_window_size() 设置浏览器宽、高
* maximize_window() 设置浏览器全屏
"""
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("http://m.baidu.com")
# 参数数字为像素点
print("设置浏览器宽480、高800显示")
driver.set_window_size(480, 800)
# 设置浏览器全屏
driver.maximize_window()
driver.quit()
""" * name → find_element_by_name() * tag_name → find_element_by_tag_name() * class_name → find_element_by_class_name() * link_text → find_element_by_link_text() * partial_link_text → find_element_by_partial_link_text() * xpath → find_element_by_xpath() * css_selector → find_element_by_css_selector() """
""" * back() 后退 * forward() 前进 * refresh() 刷新 """例子: driver.refresh() #刷新当前页面
""" * set_window_size() 设置浏览器宽、高 * maximize_window() 设置浏览器全屏 """
"""
* clear(): 清除文本。
* send_keys(*value): 模拟按键输入。
* click(): 单击元素。
* size 返回元素的尺寸。
* text 获取元素的文本。
* get_attribute(name) 获得属性值。
* is_displayed() 设置该元素是否用户可见。
"""
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
driver.find_element_by_id("kw").clear()
driver.find_element_by_id("kw").send_keys("selenium")
driver.find_element_by_id("su").click()
# submit 提交表单
search_text = driver.find_element_by_id('kw')
search_text.send_keys('selenium')
search_text.submit()
# 获得输入框的尺寸
size = driver.find_element_by_id('kw').size
print(size)
# 返回百度页面底部备案信息
text = driver.find_element_by_id("cp").text
print(text)
# 返回元素的属性值,可以是 id、 name、 type 或其他任意属性
attribute = driver.find_element_by_id("kw").get_attribute('type')
print(attribute)
# 返回元素的结果是否可见,返回结果为 True 或 False
result = driver.find_element_by_id("kw").is_displayed()
print(result)
driver.quit()
""" * clear(): 清除文本。 * send_keys(*value): 模拟按键输入。 * click(): 单击元素。 * submit():提交表单 * size 返回元素的尺寸。 * text 获取元素的文本。 * get_attribute(name) 获得属性值。 * is_displayed() 设置该元素是否用户可见。 """
(4)submit():提交表单。
例如,有些搜索框不提供搜索按钮,而是通过按键盘上的回车键完成搜索内容的提交,
这时可以通过 submit()模拟。
"""
* perform() 执行所有 ActionChains 中存储的行为;
* context_click() 右击;
* double_click() 双击;
* drag_and_drop() 拖动;
* move_to_element() 鼠标悬停。
"""
from selenium import webdriver
# 引入 ActionChains 类
from selenium.webdriver.common.action_chains import ActionChains
driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
# 定位到要鼠标悬停的元素
above = driver.find_element_by_link_text("设置")
# 对定位到的元素执行鼠标悬停操作
ActionChains(driver).move_to_element(above).perform()
# ……
# 引入 ActionChains 类 from selenium.webdriver.common.action_chains import ActionChains""" * perform() 执行所有 ActionChains 中存储的行为; * context_click() 右击; * double_click() 双击; * drag_and_drop() 拖动; * move_to_element() 鼠标悬停。 """
"""
* 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.CONTROL,'x') 剪切(Ctrl+X)
* send_keys(Keys.CONTROL,'v') 粘贴(Ctrl+V)
* send_keys(Keys.F1) 键盘 F1
……
* send_keys(Keys.F12) 键盘 F12
"""
from selenium import webdriver
# 引入Keys模块
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
# 输入框输入内容
driver.find_element_by_id("kw").send_keys("seleniumm")
# 删除多输入的一个m
driver.find_element_by_id("kw").send_keys(Keys.BACK_SPACE)
# 输入空格键+“教程”
driver.find_element_by_id("kw").send_keys(Keys.SPACE)
driver.find_element_by_id("kw").send_keys("教程")
# ctrl+a 全选输入框内容
driver.find_element_by_id("kw").send_keys(Keys.CONTROL, 'a')
# ctrl+x 剪切输入框内容
driver.find_element_by_id("kw").send_keys(Keys.CONTROL, 'x')
# ctrl+v 粘贴内容到输入框
driver.find_element_by_id("kw").send_keys(Keys.CONTROL, 'v')
# 通过回车键来代替单击操作
driver.find_element_by_id("su").send_keys(Keys.ENTER)
driver.quit()
# 引入Keys模块 from selenium.webdriver.common.keys import Keys""" * 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.CONTROL,'x') 剪切(Ctrl+X) * send_keys(Keys.CONTROL,'v') 粘贴(Ctrl+V) * send_keys(Keys.F1) 键盘 F1 …… * send_keys(Keys.F12) 键盘 F12 """
在进行 Web 自动化测试中,用得最多的几种验证信息是 title、current_url 和 text。
— title:用于获取当前页面的标题。
— current_url:用于获取当前页面的 URL。
— text:用于获取当前页面的文本信息。
"""
* title 获取当前页面title
* current_url 获取当前页面URL
* text 获得文本信息
"""
from selenium import webdriver
from time import sleep
driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
print('Before search================')
# 打印当前页面title
title = driver.title
print("title:"+ title)
# 打印当前页面URL
now_url = driver.current_url
print("URL:"+now_url)
driver.find_element_by_id("kw").send_keys("selenium")
driver.find_element_by_id("su").click()
sleep(2)
print('After search================')
# 再次打印当前页面title
title = driver.title
print("title:"+title)
# 打印当前页面URL
now_url = driver.current_url
print("URL:"+now_url)
# 获取搜索结果条数
num = driver.find_element_by_class_name('nums').text
print("result:"+num)
driver.quit()
""" * title 获取当前页面title * current_url 获取当前页面URL * text 获得文本信息 """
显式等待是 WebDriver 等待某个条件成立则继续执行,否则在达到最大时长时抛出超
时异常(TimeoutException)。
WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)
driver:浏览器驱动。
timeout:最长超时时间,默认以秒为单位。
poll_frequency:检测的间隔(步长)时间,默认为 0.5s。
ignored_exceptions:超时后的异常信息,默认情况下抛出 NoSuchElementException
异常。
WebDriverWait()一般与 until()或 until_not()方法配合使用,下面是 until()和 until_not()
方法的说明。
until(method, message=″)
调用该方法提供的驱动程序作为一个参数,直到返回值为 True。
until_not(method, message=″)
调用该方法提供的驱动程序作为一个参数,直到返回值为 False。
"""
* presence_of_element_located() 方法判断元素是否存在
"""
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.Chrome()
driver.get("http://www.baidu.com")
element = WebDriverWait(driver, 5, 0.5).until(
EC.visibility_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
异常。from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as ECWebDriverWait(driver, 5, 0.5)#设置最长时间为5秒,检测间隔为0.5selement = WebDriverWait(driver, 5, 0.5).until( EC.visibility_of_element_located((By.ID, "kw")) )
"""
自定义元素等待
"""
from selenium import webdriver
from time import sleep, ctime
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
print(ctime())
for i in range(10):
try:
el = driver.find_element_by_id("kw22")
if el.is_displayed():
break
except:
pass
sleep(1)
else:
print("time out")
print(ctime())
driver.quit()
from time import sleepsleep(1)
"""
* implicitly_wait() 隐式等待
"""
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()
""" * implicitly_wait() 隐式等待 """
implicitly_wait()的参数是时间,单位为秒,本例中设置的等待时间为 10s。首先,这 10s 并非一个固定的等待时间,它并不影响脚本的执行速度。其次,它会等待页面上的所有 元素。当脚本执行到某个元素定位时,如果元素存在,则继续执行;如果定位不到元素, 则它将以轮询的方式不断地判断元素是否存在。假设在第 6s 定位到了元素,则继续执行, 若直到超出设置时间(10s)还没有定位到元素,则抛出异常。
WebDriver 还提供了 8 种用于定位一组元素的方法。
find_elements_by_id()
find_elements_by_name()
find_elements_by_class_name()
find_elements_by_tag_name()
find_elements_by_link_text()
find_elements_by_partial_link_text()
find_elements_by_xpath()
find_elements_by_css_selector()
定位一组元素的方法与定位单个元素的方法非常像,唯一的区别是单词“element”后
面多了一个“s”,用来表示复数。
"""
* find_elements_xxx("xx") 定位一组元素
"""
from selenium import webdriver
from time import sleep
driver = webdriver.Chrome()
driver.get("https://www.baidu.cn")
driver.find_element_by_id("kw").send_keys("selenium")
driver.find_element_by_id("su").click()
sleep(2)
# 定位一组元素
texts = driver.find_elements_by_xpath("//div[@tpl='se_com_default']/h3/a")
# 计算匹配结果个数
print(len(texts))
# 循环遍历出每一条搜索结果的标题
for t in texts:
print(t.text)
driver.quit()
""" * find_elements_xxx("xx") 定位一组元素 """相比定位一个元素多了一个 s
在 Web 应用中经常会遇到 frame/iframe 表单嵌套页面的应用,WebDriver 只能在一个
页面上对元素进行识别和定位,无法直接定位 frame/iframe 表单内嵌页面上的元素,这时
就需要通过 switch_to.frame()方法将当前定位的主体切换为 frame/iframe 表单的内嵌页面。
在 Web 应用中经常会遇到 frame/iframe 表单嵌套页面的应用,WebDriver 只能在一个
页面上对元素进行识别和定位,无法直接定位 frame/iframe 表单内嵌页面上的元素,这时
就需要通过 switch_to.frame()方法将当前定位的主体切换为 frame/iframe 表单的内嵌页面。
"""
* switch_to.frame() 进入表单
* switch_to.default_content() 退出表单至根页面
"""
from selenium import webdriver
from time import sleep
driver = webdriver.Chrome()
driver.get("http://www.126.com")
sleep(2)
login_frame = driver.find_element_by_css_selector('iframe[id^="x-URS-iframe"]')
driver.switch_to.frame(login_frame)
driver.find_element_by_name("email").send_keys("username")
driver.find_element_by_name("password").send_keys("password")
driver.find_element_by_id("dologin").click()
driver.switch_to.default_content()
driver.quit()
""" * switch_to.frame() 进入表单 * switch_to.default_content() 退出表单至根页面 """
在页面操作过程中,有时单击某个链接会弹出新的窗口,这时就需要切换到新打开的 窗口中进行操作。WebDriver 提供的 switch_to.window()方法可以实现在不同的窗口间切换。
current_window_handle:获得当前窗口句柄。
window_handles:返回所有窗口的句柄到当前会话。
switch_to.window():切换到相应的窗口。
"""
* switch_to.window() 切换窗口
* current_window_handle 获得当前窗口的句柄
* window_handles:返回所有窗口的句柄到当前会话
"""
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.get("http://www.baidu.com")
# 获得百度搜索窗口句柄
search_windows = driver.current_window_handle
driver.find_element_by_link_text('登录').click()
driver.find_element_by_link_text("立即注册").click()
# 获得当前所有打开的窗口的句柄
all_handles = driver.window_handles
# 进入注册窗口
for handle in all_handles:
if handle != search_windows:
driver.switch_to.window(handle)
print(driver.title)
driver.find_element_by_name("userName").send_keys('username')
driver.find_element_by_name('phone').send_keys('138xxxxxxx')
time.sleep(2)
# ……
# 关闭当前窗口
driver.close()
# 回到搜索窗口
driver.switch_to.window(search_windows)
print(driver.title)
driver.quit()
""" * switch_to.window() 切换窗口 * current_window_handle 获得当前窗口的句柄 * window_handles:返回所有窗口的句柄到当前会话 """
在 WebDriver 中处理 JavaScript 生成的 alert、confirm 和 prompt 十分简单,具体做法是,
首先使用 switch_to.alert()方法定位,然后使用 text、accept、dismiss、send_keys 等进行操
作。
text:返回 alert、confirm、prompt 中的文字信息。
accept():接受现有警告框。
dismiss():解散现有警告框。
send_keys():在警告框中输入文本(如果可以输入的话)。
可以使用 switch_to.alert()方法为百度搜索设置弹窗,如图 4-5 所示
"""
* text:返回 alert/confirm/prompt 中的文字信息。
* accept():接受现有警告框。
* dismiss():解散现有警告框。
* send_keys(keysToSend): 发送文本至警告框。
"""
from selenium import webdriver
from time import sleep
driver = webdriver.Chrome()
driver.get('https://www.baidu.com')
# 打开搜索设置
link = driver.find_element_by_link_text('设置').click()
driver.find_element_by_link_text("搜索设置").click()
sleep(2)
# 保存设置
driver.find_element_by_class_name("prefpanelgo").click()
# 获得警告框
alert = driver.switch_to.alert
# 获得警告框提示信息
alert_text = alert.text
print(alert_text)
# 接受警告框
alert.accept()
driver.quit()
""" * text:返回 alert/confirm/prompt 中的文字信息。 * accept():接受现有警告框。 * dismiss():解散现有警告框。 * send_keys(keysToSend): 发送文本至警告框。 """
下拉框是 Web 页面常见功能之一,WebDriver 提供了 Select 类来处理下拉框。
Select 类:用于定位
"""
* Select 操作select标签的下拉框。
* select_by_value() 选择value属性选择。
* select_by_visible_text() 通过选项名称选择。
* select_by_index() 通过索引选择
"""
from selenium import webdriver
from selenium.webdriver.support.select import Select
from time import sleep
driver = webdriver.Chrome()
driver.get('https://www.w3school.com.cn/tiy/t.asp?f=eg_html_select')
driver.set_page_load_timeout(2)
driver.set_script_timeout(2)
# 切换表单
driver.switch_to.frame("iframeResult")
# 定位select标签
sel = driver.find_element_by_tag_name("select")
# value="saab"
Select(sel).select_by_value('saab')
sleep(2)
#
Select(sel).select_by_visible_text("Opel")
sleep(2)
# 根据选项的索引选择
Select(sel).select_by_index(3)
sleep(2)
driver.quit()
""" * Select 操作select标签的下拉框。 * select_by_value() 选择value属性选择。 * select_by_visible_text() 通过选项名称选择。 * select_by_index() 通过索引选择 """
上传文件是比较常见的 Web 功能之一,但 WebDriver 并没有提供专门用于上传的方法,
实现文件上传的关键在于思路。
在 Web 页面中,文件上传操作一般需要单击“上传”按钮后打开本地 Windows 窗口,
从窗口中选择本地文件进行上传。因为 WebDriver 无法操作 Windows 控件,所以对于初学
者来说,一般思路会卡在如何识别 Windows 控件这个问题上。
在 Web 页面中一般通过以下两种方式实现文件上传。
普通上传:将本地文件路径作为一个值放在 input 标签中,通过 form 表单将这个
值提交给服务器。
插件上传:一般是指基于 Flash、JavaScript 或 Ajax 等技术实现的上传功能。
对于通过 input 标签实现的上传功能,可以将其看作一个输入框,即通过 send_keys()
指定本地文件路径的方式实现文件上传。
"""
* send_keys() 指定文件上传路径。
"""
from selenium import webdriver
import os
file_path = os.path.abspath('./files/')
driver = webdriver.Chrome()
upload_page = 'file:///' + file_path + 'upfile.html'
driver.get(upload_page)
# 定位上传按钮,添加本地文件
driver.find_element_by_id("file").send_keys(file_path + 'test.txt')
# ……
""" * send_keys() 指定文件上传路径。 """
以 Chrome 浏览器为例,演示文件的下载
"""
chrome浏览器实现下载
"""
import os
from selenium import webdriver
options = webdriver.ChromeOptions()
prefs = {'profile.default_content_settings.popups': 0,
'download.default_directory': os.getcwd()}
options.add_experimental_option('prefs', prefs)
driver = webdriver.Chrome(chrome_options=options)
driver.get("https://pypi.org/project/selenium/#files")
driver.find_element_by_partial_link_text("selenium-3.141.0.tar.gz").click()
profile.default_content_settings.popups 设置为 0,表示禁止弹出下载窗口。 download.default_directory 设置文件下载路径,使用 os.getcwd()方法获取当前脚本的目录作为下载文件的保存位置。
以 Firefox 浏览器为例,演示文件的下载
"""
firefox浏览器实现下载
"""
import os
from selenium import webdriver
fp = webdriver.FirefoxProfile()
fp.set_preference("browser.download.folderList", 2)
fp.set_preference("browser.download.dir", os.getcwd())
fp.set_preference("browser.helperApps.neverAsk.saveToDisk", "binary/octet-stream")
driver = webdriver.Firefox(firefox_profile=fp)
driver.get("https://pypi.org/project/selenium/#files")
driver.find_element_by_partial_link_text("selenium-3.141.0.tar.gz").click()
为了能在 Firefox 浏览器中实现文件的下载,我们需要通过 FirefoxProfile()对其做一些 设置。 browser.download.folderList 设置为 0,表示文件会下载到浏览器默认的下载路径;设置为 2,表示文件会下载到指 定目录。 browser.download.dir 用于指定下载文件的目录。通过 os.getcwd()方法获取当前文件的所在位置,即下载文 件保存的目录。 browser.helperApps.neverAsk.saveToDisk
有时我们需要验证浏览器中的 Cookie 是否正确,因为基于真实的 Cookie 是无法通过
白盒测试和集成测试的。WebDriver 提供了操作 Cookie 的相关方法,可以读取、添加和删
除 Cookie。
WebDriver 操作 Cookie 的方法如下。
get_cookies():获得所有 Cookie。
get_cookie(name):返回字典中 key 为“name”的 Cookie。
add_cookie(cookie_dict):添加 Cookie。
delete_cookie(name,optionsString):删除名为 OpenString 的 Cookie。
delete_all_cookies():删除所有 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.Chrome()
driver.get("http://www.baidu.com")
# 获得所有cookie信息并打印
cookie = driver.get_cookies()
print(cookie)
# 添加cookie信息
driver.add_cookie({'name': 'key-aaaaaaa', 'value': 'value-bbbbbb'})
# 遍历指定的cookies
for cookie in driver.get_cookies():
print("%s -> %s" % (cookie['name'], cookie['value']))
driver.quit()
""" * 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 信息。 """delete_cookie() 和 delete_all_cookies() 方法的使用也很简单,前者通过 name 删除一个 指定的 Cookie,后者直接删除浏览器中的所有 Cookies。
有些页面操作不能依靠 WebDriver 提供的 API 来实现,如浏览器滚动条的拖动。这时
就需要借助 JavaScript 脚本。WebDriver 提供了 execute_script()方法来执行 JavaScript 代码。
"""
* execute_script() 调用JavaScript实现滚动条操作。
"""
from selenium import webdriver
from time import sleep
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
driver.set_window_size(800, 600)
driver.find_element_by_id("kw").send_keys("selenium")
driver.find_element_by_id("su").click()
sleep(2)
# 通过javascript设置浏览器窗口的滚动条位置
js = "window.scrollTo(100,450);"
driver.execute_script(js)
sleep(3)
driver.quit()
""" * execute_script() 调用JavaScript实现滚动条操作。 """
16、处理HTML5视频文件
"""
测试HTML5页面 -- 无效
JavaScript 有个内置的对象叫作 arguments。arguments 包含了函数调用的参数数组,[0]
表示取对象的第 1 个值。
currentSrc 返回当前音频/视频的 URL。如果未设置音频/视频,则返回空字符串。
load()、play()和 pause() 控制视频的加载、播放和暂停。
"""
from time import sleep
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("http://videojs.com/")
video = driver.find_element_by_id("vjs_video_3_html5_api")
# 返回播放文件地址
url = driver.execute_script("return arguments[0].currentSrc;", video)
print(url)
# 播放视频
print("start")
driver.execute_script("arguments[0].play()", video)
# 播放15秒钟
sleep(15)
# 暂停视频
print("stop")
driver.execute_script("arguments[0].pause()", video)
driver.quit()
""" 测试HTML5页面 -- 无效 JavaScript 有个内置的对象叫作 arguments。arguments 包含了函数调用的参数数组,[0] 表示取对象的第 1 个值。 currentSrc 返回当前音频/视频的 URL。如果未设置音频/视频,则返回空字符串。 load()、play()和 pause() 控制视频的加载、播放和暂停。 """
"""
滑动选择日历
在这个脚本中,用到下面几个方法。
click_and_hold(): 单击并按下鼠标左键,在鼠标事件中介绍过。
move_by_offset():移动鼠标,第一个参数为 x 坐标距离,第二个参数为 y 坐标距离。
reset_action():重置 action。
这里使用 TouchActions 类中的 scroll_from_element()方法滑动元素,参数如下。
on_element:滑动的元素。
xoffset:x 坐标距离。
yoffset:y 坐标距离。
"""
from time import sleep
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("http://www.jq22.com/yanshi4976")
driver.set_page_load_timeout(2)
driver.set_script_timeout(2)
sleep(2)
driver.switch_to.frame("iframe")
driver.find_element_by_id("appDate").click()
# 定位要滑动的年、月、日
dwwos = driver.find_elements_by_class_name("dwwo")
year = dwwos[0]
month = dwwos[1]
day = dwwos[2]
# 拨动年
action = webdriver.ActionChains(driver)
action.click_and_hold(year).move_by_offset(0, 100).perform()
action.reset_actions()
# 拨动月
action2 = webdriver.ActionChains(driver)
action2.click_and_hold(month).move_by_offset(0, 150).perform()
action2.reset_actions()
# 拨动天
action3 = webdriver.ActionChains(driver)
action3.click_and_hold(day).move_by_offset(0, 150).perform()
action3.reset_actions()
# 废弃,在新的浏览器和驱动中报错
# action = webdriver.TouchActions(driver)
# action.scroll_from_element(year, 0, 5).perform()
# action.scroll_from_element(month, 0, 30).perform()
# action.scroll_from_element(day, 0, 30).perform()
# ...
""" 滑动解锁 - 失效 """ from time import sleep from selenium import webdriver from selenium.webdriver import ActionChains from selenium.common.exceptions import UnexpectedAlertPresentException driver = webdriver.Chrome() driver.get("https://www.helloweba.com/demo/2017/unlock/") # 定位滑动块 slider = driver.find_elements_by_class_name("slide-to-unlock-handle")[0] action = ActionChains(driver) action.click_and_hold(slider).perform() for index in range(200): try: action.move_by_offset(2, 0).perform() except UnexpectedAlertPresentException: break action.reset_actions() sleep(0.1) # 等待停顿时间 # 打印警告框提示 success_text = driver.switch_to.alert.text print(success_text)
""" 滑动选择日历 在这个脚本中,用到下面几个方法。 click_and_hold(): 单击并按下鼠标左键,在鼠标事件中介绍过。 move_by_offset():移动鼠标,第一个参数为 x 坐标距离,第二个参数为 y 坐标距离。 reset_action():重置 action。 这里使用 TouchActions 类中的 scroll_from_element()方法滑动元素,参数如下。 on_element:滑动的元素。 xoffset:x 坐标距离。 yoffset:y 坐标距离。 """
"""
* save_screenshot() 截取窗口图片。
"""
from selenium import webdriver
driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
# 对当前窗口截图,并指定图片的保存位置
driver.save_screenshot("./files/baidu_img.png")
""" * save_screenshot() 截取窗口图片。
在前面的例子中一直使用 quit()方法,其含义为退出相关的驱动程序和关闭所有窗口。
除此之外,WebDriver 还提供了 close()方法,用来关闭当前窗口。例如,在 4.10 节中会打
开多个窗口,当准备关闭其中某个窗口时,可以用 close()方法。
quit()#关驱动
close()#关当窗口