Python Selenium基本用法

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()通过标签内文本定位,即精准定位。
find_element_by_partial_link_text()通过标签内部分文本定位,即模糊定位。
find_element_by_xpath()通过 xpath 表达式定位
find_element_by_css_selector()通过 css 选择器定位

假设下面代码某个页面的代码片段,如下所示:

<html>
<head>
<body link="#cc0916">
  <a id="logo" href="http://c.cainiao.net" onclick="">
   <form id="form" class="fm" name="f" action="c.cainiao.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 class="vip" href="http://c.baincheng.net">百度中文网</a>
<a class="search" href="http://www.baidu.com">hao123</a>

示例如下:

#使用全部文本内容定位链接
browser.find_element_by_link_text("百度中文网")
#使用部分文本内容定位链接
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()
# 访问百度中文网首页
first_url= 'http://c.cainiao.net'
driver.get(first_url)

# 访问c语言教程
second_url='http://c.cainiao.net/c/'
driver.get(second_url)

# 返回(后退)到百度中文网首页
driver.back()

# 前进到C语言教程页
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 webdriverimport timedriver = webdriver.Chrome()driver.get("https://www.baidu.com")#模拟键盘,输出文本driver.find_element_by_id("kw").send_keys("百度中文网")#单击“百度”一下查找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)

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_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 ActionChains

driver = webdriver.Chrome() driver.get(“c.cainiao.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 Keys

driver = webdriver.Chrome() driver.get(“www.baidu.com”)

输入框输入内容

driver.find_element_by_id(“kw”).send_keys(“百度中文网H”)

删除多输入的一个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教程”)

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’)

使用回车键来代替单击操作click

driver.find_element_by_id(“su”).send_keys(Keys.ENTER)

执行JS脚本

WebDriver 提供了 execute_script() 方法来执行 JavaScript 代码,比如控制浏览器的滚动条。示例如下:

from selenium import webdriver
from time import sleep

# 访问百度
driver=webdriver.Chrome()
driver.get("http://www.baidu.com")
# 最大化浏览器窗口
driver.maximize_window()
# 搜索
driver.find_element_by_id("kw").send_keys("百度中文网")
driver.find_element_by_id("su").click()
sleep(3)

# 通过js代码设置滚动条位置,数值代表(左边距,上边距)
js="window.scrollTo(100,500);"
#执行js代码
driver.execute_script(js)
sleep(5)
driver.quit()

---------------------------END---------------------------

题外话

感谢你能看到最后,给大家准备了一些福利!

感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。


👉CSDN大礼包🎁:全网最全《Python学习资料》免费赠送🆓!(安全链接,放心点击)

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

img

二、Python兼职渠道推荐*

学的同时助你创收,每天花1-2小时兼职,轻松稿定生活费.
在这里插入图片描述

三、最新Python学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

img

四、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

img

👉CSDN大礼包🎁:全网最全《Python学习资料》免费赠送🆓!(安全链接,放心点击)

若有侵权,请联系删除

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值