社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

Selenium 八大定位,滚雪球学 Python 番外系列

梦想橡皮擦 • 3 年前 • 384 次点击  

今天是持续写作的第 <font color="red">24</font> / 100 天。
如果你有想要交流的想法、技术,欢迎在评论区留言。

今天学点简单又单调了,Selenium 八大定位。

橡皮擦有几个朋友在群里说:唉,橡皮擦,你咋又写基础的东西了。橡皮擦想了想答道:这不废话么,你叫一个做产品的天天写技术,合适么。

Selenium 八大定位

每次写八大定位的时候,总产生一种要写武侠小说的感觉,面前出现八个铜人。

在 Selenium 中根据 HTML 页面元素的标签或者属性来定位,用测试的语言描述就是。

  1. 定位网页上的页面元素,并获取元素对象;
  2. 对元素对象实施点击,拖拽,输入等操作。

Selenium 提供了 8 种基本定位方法,分别为 id,name,class name,tag name,link_text,partial link text,css selector,xpath。

通过 id 进行定位

HTML 网页中任意一个标签或元素都可以设置一个唯一的 ID,所以在任意页面中通过 ID 都可以定位到一个元素,前提是存在这样一个 ID 的标签。

通过 ID 进行定位的方法为 find_element_by_id ,看名字起得就非常好,查找标签依靠 ID,这一系列的方法后文会学习到,都长的差不多,具体代码如下。

from selenium import webdriver
import time

driver = webdriver.Firefox()
# open_driver = webdriver.Chrome()
# open_driver = webdriver.PhantomJS()
# 打开百度图片
driver.get('https://image.baidu.com/')

# 找到输入框,输入模特
driver.find_element_by_id("kw").send_keys("模特")

# driver.close()

上述代码中的 .find_element_by_id("kw") 就是在通过 ID 寻找标签。

20201214204435895[1].png

代码运行完毕,打开浏览器会自动输入 模特

20201214204319256[1].png

通过 name 进行定位

name 也是 HTML 网页元素的一个属性,你可以在网页源码中检索一下 name= 看一下都有哪些位置包含,如果对网页十分了解的同学,这个步骤也可以忽略。

通过 name 进行定位使用到的方法是 find_element_by_name 。在百度图片网页中发现输入框也携带 name 属性。通过下述代码可以进行与 ID 相同的操作。

20201214204649959[1].png
from selenium import webdriver
import time

driver = webdriver.Firefox()
# open_driver = webdriver.Chrome()
# open_driver = webdriver.PhantomJS()
# 打开百度图片
driver.get('https://image.baidu.com/')

# 通过ID找到输入框,输入模特
# driver.find_element_by_id("kw").send_keys("模特")
# 通过name找到输入框,输入模特
driver.find_element_by_name("word").send_keys("小女生")

# driver.close()

特别注意用 name 定位网页元素,需要保证 name 在待定位的网页中唯一。

通过 class 进行定位

该定位方法为 find_element_by_class_name ,方法名比较长,但是使用方式和上文一致。

# 通过 class name 进行定位
driver.find_element_by_class_name("s_ipt").send_keys("帅哥")

通过 link_text 进行定位

该定位方法是通过超链接标签的文字进行匹配定位的,例如下图中红框区域的超链接。实现打开百度图片,点击高清动漫。

20201214205345224[1].png
# 找到链接之后,还可以跳转,注意超链接文本要写完整,即完整匹配。
driver.find_element_by_link_text("高清动漫").click()

图好看

Selenium 八大定位,滚雪球学 Python 番外系列

通过 partial_link_text 进行定位是 link_text 的一个子级,类似模糊匹配,代码可以写成。

# 找到链接之后,还可以跳转
driver.find_element_by_partial_link_text("高清").click()

通过 tag_name 进行定位

tag_name 即标签名,也就是通过 HTML 网页中的标签名进行定位。

# 通过标签名进行定位,该方法使用较少
form_div = driver.find_element_by_tag_name("form")
print(form_div)

在网页中由于标签名重复的概率很高,故此方法使用极少。

通过 CSS 进行定位

CSS 定位的优点是速度快、语法简单。难点是你需要对 CSS 选择器非常熟悉,否则需要补充 HTML+CSS 的相关知识。后文中我们核心使用的方法是 css_selector ,例如修改第一段代码,通过 CSS 里面的 id选择器 进行定位。

# id 选择器
driver.find_element_by_css_selector("#kw").send_keys("小朋友")
# class 选择器
driver.find_element_by_css_selector(".s_ipt").send_keys("小朋友")
# name选择器
driver.find_element_by_css_selector("input[name='word']").send_keys("小朋友")

通过 XPath 进行定位

XPath 定位更加好用,但是麻烦的是你又需要学习一个额外的语法了,相对于 CSS 定位来说,该方式定位具备更大的灵活性,但是速度略微比 CSS 慢了一些(当然一般情况下也看不出来)。

driver.find_element_by_xpath("//*[@name='word']").send_keys("大朋友")

对于 XPath 语法,本系列博客不进行讲解,坚持不跑题,坚持你自己可以搞定的理念。

写在后面

本篇博客主要介绍了 Selenium 中的八大定位,掌握方法即可,后文大量依赖这些定位方式,所以不用担心学不会哒。


如果你想跟博主建立亲密关系,可以关注同名公众号 <font color="red">梦想橡皮擦</font>,近距离接触一个逗趣的互联网高级网虫。
博主 ID:梦想橡皮擦,希望大家<font color="red">点赞</font>、<font color="red">评论</font>、<font color="red">收藏</font>。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/120196
 
384 次点击