selenium元素定位介绍

1.元素定位

当我们想让Selenium操作浏览器及元素,需要告知 Sclerium 如何去定位元素来模拟用户动作。例如,
要操作 Bing 搜索页,步骤如下:
(1)找到搜索框与搜索按钮。
(2)通过键盘输入检索的关键字。
(3)用鼠标单击搜索按钮。
(4)提交搜索请求。
Selenium 能够模拟上面描述的动作,但Selenium 并不能理解如何在搜索框中输入关键宁或单击搜象投钮的操作。Selenium 需要代码告诉它如何定位搜索框或搜素按钮,从而实现模拟人工的操作。
Selenium提供了多种方法用于元素定位,如下:
find_element_by_id:通过元素的id属性值来定位元素;
find_element_by_name:通过元素的name 属性值来定位元素;
find_element_by_class_name:通过元素的class属性值定位元素;
find_element_by_xpath:通过 XPath 来定位元素;
find_element_by_tag_name:通过元素的 tag name来定位元素
find_element_by_css_selector:通过CSS 选择器来定位元素;
find_element_by_link_text:通过元素标签对之间的文本信息来定位元素。
find_element_by_partial_link_text:通过元素标签对之间的部分文本信息来定位元素。

2.认识浏览器开发者工具

在进行元素定位前,必须学会查看在浏览器中查看网页源代码。打开开发者工具或者使用F12快捷键,查看网页源码。

案例:必应网站(https://cn.bing.com/)的搜索框。
必应网站的搜索框
必应网站(https://cn.bing.com/)的搜索框。
必应网站的搜索按钮

图中为必应网站中搜索框的源代码,其中input标签中的id属性值为sb_form_q。

3. find_element_by_id(“id value”)

使用find_element_by_id(“id value”)函数来定位搜索框并输入信息“Java”,再点击搜索按钮的代码如下:

// A code block
from selenium import webdriver
from time import sleep

# 打开浏览器
driver = webdriver.Chrome()
# 搜索必应网站URL
driver.get("https://cn.bing.com/")
# 定位到搜索框,输入Java搜索词
driver.find_element_by_id("sb_form_q").send_keys("Java")
# 定位到按钮,单击搜索按钮
driver.find_element_by_id("search_icon").click()
sleep(5)
driver.quit()
#最主要的工作就是元素定位 find_element_by_id()

4. find_element_by_name(“name value”)

使用find_element_by_name(“name value”)函数来定位搜索框并发送信息“Java”,再点击搜索按钮的代码如下:

// A code block  
from selenium import webdriver
from time import sleep

# 打开浏览器
driver = webdriver.Chrome()
# 搜索必应网站URL
driver.get("https://cn.bing.com/")
# 定位到搜索框,输入Java搜索词
driver.find_element_by_name("q").send_keys("Java")
# 定位到按钮,单击搜索按钮()按钮标签没有name属性,因此不可以使用name的定位方法 告诉我们要灵活选择合适的元素定位方法
driver.find_element_by_id("search_icon").click()
sleep(5)
driver.quit()

5. find_element_by_class_name(“class value”)

使用find_element_by_class_name(“class value”)函数来定位搜索框并发送信息“Java”,再点击搜索按钮的代码如下:

// A code block  
from selenium import webdriver
from time import sleep

# 打开浏览器
driver = webdriver.Chrome()
# 搜索必应网站URL
driver.get("https://cn.bing.com/")
# 定位到搜索框,输入Java搜索词
driver.find_element_by_class_name("sb_form_q").send_keys("Java")
# 定位到按钮,单击搜索按钮
# 当有多个类名属性值,应该如何写这个方法的参数
driver.find_element_by_class_name("search").click()
sleep(10)
driver.quit()

注意:在使用classname属性定位元素时,常遇到一个标签使用多个样式属性,一个样式属性被多个标签引用的情况。

6. find_element_by_xpath(“”)

关于xpath的使用方法,请见以下资料:https://www.cnblogs.com/xiaohuicode/p/15696343.html
https://www.w3cschool.cn/xpath/xpath-xpath-tutorialij9m1t5i.html

https://www.jianshu.com/p/6a0dbb4e246a/

from selenium import webdriver
from time import sleep
使用xpath元素定位
# 新建驱动对象 打开浏览器
driver = webdriver.Chrome()
# 请求并打开必应网站
driver.get("https://cn.bing.com/")
# 在搜索框输入搜索词
driver.find_element_by_xpath('//form/div/input[@class="sb_form_q"]').send_keys("Java")
# 点击搜索按钮
driver.find_element_by_xpath('//*[@class="search icon tooltip"]').click()
# 重点 如何填入xpath的值
# 1.去浏览器复制
# 2.自己写
sleep(3)
# 退出浏览器
driver.quit()

7. find_element_by_link_text(“link text value”)

该方法存在缺点,在一个网页上存在多个标签间文本相同时易发生错乱。
但也有优点,例如作业中搜索“元素定位简介”一词时,我的视频在页面位置不固定,前面介绍方法不可靠,使用文本定位确能精确定位。

from selenium import webdriver
from time import sleep

# 使用link_text及partial_link_text定位元素
# 案例点击必应首页上“图片”标签
# 打开浏览器
driver = webdriver.Chrome()
# 打开必应网站
driver.get("https://cn.bing.com/")
# 需要停止的原因是,打开必应,到定位图片元素需要的时间
# 代码执行的时间快于 网页加载到页面内容的时间 所以代码执行找不到这个图片这个文本 等待时间
sleep(2)
# 点击图片标签,打开图片网站
# driver.find_element_by_link_text("图片").click()
driver.find_element_by_partial_link_text("重庆").click()
sleep(2)
driver.quit()

8. find_element_by_partial_link_text(“partial link text value”)

from selenium import webdriver
from time import sleep

# 使用link_text及partial_link_text定位元素
# 案例点击必应首页上“图片”标签
# 打开浏览器
driver = webdriver.Chrome()
# 打开必应网站
driver.get("https://cn.bing.com/")
# 需要停止的原因是,打开必应,到定位图片元素需要的时间
# 代码执行的时间快于 网页加载到页面内容的时间 所以代码执行找不到这个图片这个文本 等待时间
sleep(2)
# 点击图片标签,打开图片网站
# driver.find_element_by_link_text("图片").click()
driver.find_element_by_partial_link_text("重庆").click()
sleep(2)
driver.quit()

9. find_element_by_tag_name(“tag name”)

优缺点:
缺点:定位不准确,一个网页中存在多个相同标签元素
优点:如定位网页上所有复选框等场景时适应。

from selenium import webdriver
from time import sleep
# 打开浏览器
driver = webdriver.Chrome()
# 访问必应
driver.get("https://cn.bing.com/")
# 元素定位input标签
driver.find_element_by_tag_name("input").send_keys("Java")
# 元素定位搜索按钮 label标签
driver.find_element_by_tag_name("label").click()
sleep(3)
# 退出浏览器
driver.quit()

10. find_element_by_css_selector(“css selector”)

css选择器语法参考:
https://www.cnblogs.com/liuyuelinfighting/p/14950596.html

from selenium import webdriver
from time import sleep

# 主要介绍使用css选择器  其中的属性定位和层级定位
# 打开浏览器
driver = webdriver.Chrome()
# 访问必应
driver.get("https://cn.bing.com/")
# 元素定位input标签
# 通过id定位
# driver.find_element_by_css_selector("#sb_form_q").send_keys("Java")
# 通过name属性定位
# driver.find_element_by_css_selector("[name='q']").send_keys("Java")
# 通过属性定位
# driver.find_element_by_css_selector("[type='search']").send_keys("Java")
# driver.find_element_by_tag_name("input").send_keys("Java")
# 元素定位搜索按钮 label标签
# 通过class定位
# driver.find_element_by_css_selector(".search").click()
# 通过层级关系定位
driver.find_element_by_css_selector("div#sb_form_c>input#sb_form_q").send_keys("Java")
driver.find_element_by_css_selector("form#sb_form>label[for='sb_form_go']").click()
# driver.find_element_by_tag_name("label").click()
sleep(3)
# 退出浏览器
driver.quit()
  • 12
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值