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

举报
梦想橡皮擦 发表于 2021/08/11 10:07:14 2021/08/11
【摘要】 如果你有想要交流的想法、技术,欢迎在评论区留言。今天学点简单又单调了,Selenium 八大定位。橡皮擦有几个朋友在群里说:唉,橡皮擦,你咋又写基础的东西了。橡皮擦想了想答道:这不废话么,你叫一个做产品的天天写技术,合适么。 Selenium 八大定位每次写八大定位的时候,总产生一种要写武侠小说的感觉,面前出现八个铜人。在 Selenium 中根据 HTML 页面元素的标签或者属性来定位,用...

如果你有想要交流的想法、技术,欢迎在评论区留言。

今天学点简单又单调了,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 寻找标签。

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

通过 name 进行定位

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

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

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 进行定位

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

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

图好看

通过 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 中的八大定位,掌握方法即可,后文大量依赖这些定位方式,所以不用担心学不会哒。


博主 ID:梦想橡皮擦,希望大家点赞评论收藏

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。