当前位置:首页 > 互联网 > 正文内容

Python Selenium基本用法

小楼听雨3个月前 (05-20)互联网26

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="#cc0916">  <a id="logo" href="http://c.biancheng.net" onclick="">   <form id="form" class="fm" name="f" action="c.biancheng.net">    <span class="btn"></span>    <input id="kw" class="s_ipt_wr" name="wd" value="" maxlength="255" autocomplete="off"></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("//*[@id='kw']")#通过css选择器定位browser.find_element_by_css_selector("#kw")

通过 a 标签内的文本内容定位节点,如下所示:

<a href="http://c.baincheng.net">C语言中文网</a> <a href="http://www.baidu.com">hao123</a>

示例如下:

#使用全部文本内容定位链接browser.find_element_by_link_text("c语言中文网")#使用部分文本内容定位链接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 webdriverdriver = 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 webdriverdriver = webdriver.Chrome()# 访问C语言中文网首页first_url= 'http://c.biancheng.net'driver.get(first_url)# 访问c语言教程second_url='http://c.biancheng.net/c/'driver.get(second_url)# 返回(后退)到c语言中文网首页driver.back()# 前进到C语言教程页driver.forward()# 刷新当前页面相当于F5driver.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 webdriverimport timedriver = webdriver.Chrome()driver.get("https://www.baidu.com")#模拟键盘,输出文本driver.find_element_by_id("kw").send_keys("C语言中文网")#单击“百度”一下查找driver.find_element_by_id("su").click()time.sleep(3)#退出浏览器driver.quit()

除了上述方法外, WebDriver 还有一些常用属性,如下所示:

from selenium import webdriverdriver = webdriver.Chrome()# 获取HTML结构源码driver.page_source#在源码中查找指定的字符串driver.page_source.find('字符串')# 返回百度页面底部备案信息text = driver.find_element_by_id("cp").textprint(text)# 获取输入框的尺寸size = driver.find_element_by_id('kw').sizeprint(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_element=None) 单击鼠标左键,不松开
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 ActionChainsdriver = webdriver.Chrome()driver.get("http://c.biancheng.net")# 通过xpath表达式定位到要悬停的元素above = driver.find_element_by_xpath('//ul[@id="ad-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)删除键(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…Fn)键盘 F1…Fn
keys.down(value,element=None)按下键盘上的某个键
keys.up(value,element=None)松开键盘上的某个键


示例如下:

from selenium import webdriver# 引入 Keys 模块from selenium.webdriver.common.keys import Keysdriver = webdriver.Chrome()driver.get("http://www.baidu.com")# 输入框输入内容driver.find_element_by_id("kw").send_keys("C语言中文网H")# 删除多输入的一个Hdriver.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教程")# 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')# 使用回车键来代替单击操作clickdriver.find_element_by_id("su").send_keys(Keys.ENTER)

无界面浏览器

Chromedriver 每一次运行都要打开浏览器,并执行相应的输入、搜索等操作,这样会导致浏览器交互能力变差,浪费许多时间。 Selenium 为了增强浏览器的交互能力,允许您使用无头浏览器模式,也就是无界面浏览器,它被广泛的应用于爬虫和自动化测试中。通过以下代码可以设置无头浏览器模式:

from selenium import webdriverimport timeoptions=webdriver.ChromeOptions()options.add_argument('--headless')#无界面浏览driver=webdriver.Chrome(options=options)driver.get('https://www.baidu.com')kw1=driver.find_element_by_id('kw')print(driver.title)time.sleep(3)#关闭当前界面,只有一个窗口driver.close()#关闭所有界面driver.quit()

除了可以设置无头界面之外,Selenium 还支持其他一些浏览器参数设置,如下所示:

opption.add_argument('--window-size=600,600') #设置窗口大小 opption.add_argument('--incognito') #无痕模式 opption.add_argument('--disable-infobars') #去掉chrome正受到自动测试软件的控制的提示 opption.add_argument('user-agent="XXXX"') #添加请求头 opption.add_argument("--proxy-server=http://200.130.123.43:3456")#代理服务器访问 opption.add_experimental_option('excludeSwitches', ['enable-automation'])#开发者模式 opption.add_argument('blink-settings=imagesEnabled=false')  #禁止加载图片 opption.add_argument('lang=zh_CN.UTF-8') #设置默认编码为utf-8 opption.add_extension(create_proxyauth_extension(            proxy_host='host',            proxy_port='port',            proxy_username="username",            proxy_password="password"        ))# 设置有账号密码的代理 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 webdriverfrom time import sleep# 访问百度driver=webdriver.Chrome()driver.get("http://www.baidu.com")# 最大化浏览器窗口driver.maximize_window()# 搜索driver.find_element_by_id("kw").send_keys("C语言中文网")driver.find_element_by_id("su").click()sleep(3)# 通过js代码设置滚动条位置,数值代表(左边距,上边距)js="window.scrollTo(100,500);"#执行js代码driver.execute_script(js)sleep(5)driver.quit()

如果想了解更多关于 Selenium 的知识,请参考官方文档:https://www.selenium.dev/documentation/en/




扫描二维码推送至手机访问。

版权声明:本文由小楼听雨发布,如需转载请注明出处。

本文链接:https://www.xyz5668.top/?id=11

分享给朋友:

“Python Selenium基本用法” 的相关文章

Python类对象的创建和使用

Python类的实例化对已定义好的类进行实例化,其语法格式如下:类名(参数)定义类时,如果没有手动添加 __init__() 构造方法,又或者添加的 __init__() 中仅有一个 self 参数,则创建类对象时的参数可以省略不写。例如,如下代码创建了名为 CLanguage 的类,并对其进行了实...

Python Scrapy爬虫框架详解

Python Scrapy爬虫框架详解

Scrapy 是一个基于 Twisted 实现的异步处理爬虫框架,该框架使用纯 Python 语言编写。Scrapy 框架应用广泛,常用于数据采集、网络监测,以及自动化测试等。提示:Twisted 是一个基于事件驱动的网络引擎框架,同样采用 Python 实现。Scrapy下载安装Scrapy 支持...

Python爬虫实现Cookie模拟登录

Python爬虫实现Cookie模拟登录

在使用爬虫采集数据的规程中,我们会遇到许多不同类型的网站,比如一些网站需要用户登录后才允许查看相关内容,如果遇到这种类型的网站,又应该如何编写爬虫程序呢?Cookie 模拟登录技术成功地解决了此类问题。Cookie 是一个记录了用户登录状态以及用户属性的加密字符串。当你第一次登陆网站时,服务端会在返...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。