海珠营销型网站建设公司,24 手表网站,google搜索引擎官网,制作企业网站素材视频Selenium 作为一款 Web 自动化测试框架#xff0c;提供了诸多操作浏览器的方法#xff0c;这里对其中的常用方法做详细介绍。
定位节点
Selenium 提供了 8 种定位单个节点的方法#xff0c;如下所示#xff1a; 定位节点方法方法说明find_element_by_id()通过 id 属性值定…Selenium 作为一款 Web 自动化测试框架提供了诸多操作浏览器的方法这里对其中的常用方法做详细介绍。
定位节点
Selenium 提供了 8 种定位单个节点的方法如下所示
定位节点方法方法说明find_element_by_id()通过 id 属性值定位find_element_by_name()通过 name 属性值定位find_element_by_class_name()通过 class 属性值定位find_element_by_tag_name()通过 tag 标签名定位find_element_by_link_text()通过a标签内文本定位即精准定位。find_element_by_partial_link_text()通过a标签内部分文本定位即模糊定位。find_element_by_xpath()通过 xpath 表达式定位find_element_by_css_selector()通过 css 选择器定位
假设下面代码某个页面的代码片段如下所示
html
head
body link#cc0916a idlogo hrefhttp://www.CSDN.net onclickform idform classfm namef actionwww.CSDN.netspan classbtn/spaninput idkw classs_ipt_wr namewd value maxlength255 autocompleteoff
/body
/head
/html
下面使用表格中提供的方法定位 input 输出框。如下所示
#创建browser是浏览器对象
browser webdriver.Chrome()
#访问某个url得到上述代码片段
browser.get(url)
#通过id定义输入框
browser.dr.find_element_by_id(kw)
#通过class定义
browser.find_element_by_class_name(s_ipt_wr)
#通过name定位
browser.find_element_by_name(wd)
#通过tag name定位:
browser.find_element_by_tag_name(input)
#通过xpath定位
browser.find_element_by_xpath(//*[idkw])
#通过css选择器定位
browser.find_element_by_css_selector(#kw)
通过 a 标签内的文本内容定位节点如下所示
a classvip hrefhttp://www.CSDN.netCSDN/a
a classsearch hrefhttp://www.baidu.comhao123/a
示例如下
#使用全部文本内容定位链接
browser.find_element_by_link_text(CSDN)
#使用部分文本内容定位链接
browser.find_element_by_partial_link_text(123)
如果您想定位一组元素方法如下所示
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表示复数因此上述方法的返回值是一个列表您可以使用 for 循环拿到所有的元素节点。
控制浏览器
Selenium 可以操控浏览器的窗口大小、刷新页面以及控制浏览器的前进、后退等
1) 设置浏览器窗口大小、位置
from selenium import webdriver
driver webdriver.Chrome()
driver.get(http://www.baidu.com)
#参数数字为像素点
driver.set_window_size(480, 800)
#设置窗口位置
driver.set_window_position(100,200)
#同时设置窗口的大小和坐标
driver.set_window_rect(450,300,32,50)
#退出浏览器
driver.quit()
2) 控制网页前进、后退、刷新页面
from selenium import webdriver
driver webdriver.Chrome()
# 访问CSDN首页
first_url http://www.CSDN.net
driver.get(first_url)
# 访问CSDN
second_urlhttps://blog.csdn.net/nav/back-end
driver.get(second_url)
# 返回后退到CSDN首页
driver.back()
# 前进到后端博客页
driver.forward()
# 刷新当前页面相当于F5
driver.refresh()
# 退出/关闭浏览器
driver.quit()
WebDriver常用方法
上文中介绍了如何定位元素以及如何设置浏览的大小、位置。 定位元素节点只是第一步 定位之后还需要对这个元素进行操作 比如单击按钮或者在输入框输入文本 下面介绍 WebDriver 中的最常用方法
# 请求url
get(url)
# 模拟键盘输入文本
send_keys (value)
# 清除已经输入的文本
clear()
# 单击已经定位的元素
click()
# 用于提交表单比如百度搜索框内输入关键字之后的“回车” 操作
submit()
#返回属性的属性值返回元素的属性值可以是id、name、type 或其他任意属性
get_attribute(name)
# 返回布尔值检查元素是否用户可见比如 display属性为hidden或者none
is_displayed()
示例如下
from selenium import webdriver
import time
driver webdriver.Chrome()
driver.get(https://www.baidu.com)
#模拟键盘输出文本
driver.find_element_by_id(kw).send_keys(CSDN)
#单击“百度”一下查找
driver.find_element_by_id(su).click()
time.sleep(3)
#退出浏览器
driver.quit()
除了上述方法外 WebDriver 还有一些常用属性如下所示
from selenium import webdriver
driver webdriver.Chrome()
# 获取HTML结构源码
driver.page_source
#在源码中查找指定的字符串
driver.page_source.find(字符串)
# 返回百度页面底部备案信息
text driver.find_element_by_id(cp).text
print(text)
# 获取输入框的尺寸
size driver.find_element_by_id(kw).size
print(size)
输出结果
©2015 Baidu 使用百度前必读 意见反馈 京 ICP 证 030173 号{width: 500, height: 22}
Selenium事件处理
Selenium WebDriver 提供了一些事件处理函数鼠标、键盘等下面我们对常用的事件函数做简单介绍。
1) 鼠标事件
Selenium WebDriver 将关于鼠标的操作方法都封装在 ActionChains 类中使用时需要引入 ActionChains 类如下所示
from selenium.webdriver.common.action_chains import ActionChains
该类包含了鼠标操作的常用方法
鼠标事件方法说明ActionChains(driver)构造 ActionChains 鼠标对象。click()单击click_and_hold(on_elementNone) 单击鼠标左键不松开context_click()右击double_click()双击drag_and_drop()拖动move_to_element(above)执行鼠标悬停操作context_click()用于模拟鼠标右键操作 在调用时需要指定元素定位。perform()将所有鼠标操作提交执行。
示例如下
from selenium import webdriver
#导入 ActionChains 类
from selenium.webdriver.common.action_chains import ActionChains
driver webdriver.Chrome()
driver.get(http://www.CSDN.net)
# 通过xpath表达式定位到要悬停的元素
above driver.find_element_by_xpath(//ul[idad-link-top]/li[1])
# 对定位到的元素执行鼠标悬停操作
ActionChains(driver).move_to_element(above).perform()
2) 键盘事件
Selenium WebDriver 的 Keys 模块提供了模拟键盘输入的 send_keys() 方法除此之外该模块也提供了操作键盘的其他方法比如复制、粘贴等等。
在使用之前首先需要导入 Keys 类如下所示
from selenium.webdriver.common.keys import Keys
下面列举了一些常用方法
键盘操作方法说明send_keys(Keys.BACK_SPACE)删除键BackSpacesend_keys(Keys.SPACE)空格键(Space)send_keys(Keys.TAB)制表键(Tab)send_keys(Keys.ESCAPE)回退键Escsend_keys(Keys.ENTER)回车键Entersend_keys(Keys.CONTROL,a全选CtrlAsend_keys(Keys.CONTROL,c)复制CtrlCsend_keys(Keys.CONTROL,x)剪切CtrlXsend_keys(Keys.CONTROL,v粘贴CtrlVsend_keys(Keys.F1…Fn)键盘 F1…Fnkeys.down(value,elementNone)按下键盘上的某个键keys.up(value,elementNone)松开键盘上的某个键
示例如下
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(CSDN)
# 删除多输入的一个H
driver.find_element_by_id(kw).send_keys(Keys.BACK_SPACE)
#单击“百度”一下查找
driver.find_element_by_id(su).click()
time.sleep(3)
driver.quit()
其它键盘操作方法如下所示
# 输入空格键 “Python教程”
driver.find_element_by_id(kw).send_keys(Keys.SPACE)
driver.find_element_by_id(kw).send_keys(Python教程)
# ctrla 全选输入框内容
driver.find_element_by_id(kw).send_keys(Keys.CONTROL, a)
# ctrlx 剪切输入框内容
driver.find_element_by_id(kw).send_keys(Keys.CONTROL, x)
# ctrlv 粘贴内容到输入框
driver.find_element_by_id(kw).send_keys(Keys.CONTROL, v)
# 使用回车键来代替单击操作click
driver.find_element_by_id(su).send_keys(Keys.ENTER)
无界面浏览器
Chromedriver 每一次运行都要打开浏览器并执行相应的输入、搜索等操作这样会导致浏览器交互能力变差浪费许多时间。
Selenium 为了增强浏览器的交互能力允许您使用无头浏览器模式也就是无界面浏览器它被广泛的应用于爬虫和自动化测试中。通过以下代码可以设置无头浏览器模式
from selenium import webdriver
import time
optionswebdriver.ChromeOptions()
options.add_argument(--headless)#无界面浏览
driverwebdriver.Chrome(optionsoptions)
driver.get(https://www.baidu.com)
kw1driver.find_element_by_id(kw)
print(driver.title)
time.sleep(3)
#关闭当前界面只有一个窗口
driver.close()
#关闭所有界面
driver.quit()
除了可以设置无头界面之外Selenium 还支持其他一些浏览器参数设置如下所示
opption.add_argument(--window-size600,600) #设置窗口大小
opption.add_argument(--incognito) #无痕模式
opption.add_argument(--disable-infobars) #去掉chrome正受到自动测试软件的控制的提示
opption.add_argument(user-agentXXXX) #添加请求头
opption.add_argument(--proxy-serverhttp://200.130.123.43:3456)#代理服务器访问
opption.add_experimental_option(excludeSwitches, [enable-automation])#开发者模式
opption.add_argument(blink-settingsimagesEnabledfalse) #禁止加载图片
opption.add_argument(langzh_CN.UTF-8) #设置默认编码为utf-8
opption.add_extension(create_proxyauth_extension(proxy_hosthost,proxy_portport,proxy_usernameusername,proxy_passwordpassword))# 设置有账号密码的代理
opption.add_argument(--disable-gpu) # 这个参数可以规避谷歌的部分bug
opption.add_argument(--disable-javascript) # 禁用javascript
opption.add_argument(--hide-scrollbars) # 隐藏滚动条
执行JS脚本
WebDriver 提供了 execute_script() 方法来执行 JavaScript 代码比如控制浏览器的滚动条。示例如下
from selenium import webdriver
from time import sleep
# 访问百度
driverwebdriver.Chrome()
driver.get(http://www.baidu.com)
# 最大化浏览器窗口
driver.maximize_window()
# 搜索
driver.find_element_by_id(kw).send_keys(CSDN)
driver.find_element_by_id(su).click()
sleep(3)
# 通过js代码设置滚动条位置数值代表(左边距上边距)
jswindow.scrollTo(100,500);
#执行js代码
driver.execute_script(js)
sleep(5)
driver.quit() 如果想了解更多关于 Selenium 的知识请参考官方文档/documentation/
Python教程8天python从入门到精通学python看这套就够了