Selenium基础(一):元素定位方法

是小鱼呀·2022-04-20 14:49·1319 次阅读

Selenium基础(一):元素定位方法

8种元素定位方法

定位方法 python中对应的方法
id find_element_by_id()
name find_element_by_name()
tag find_element_by_tag_name()
class find_element_by_class_name()
link_text find_element_by_link_text()
partrial link find_element_by_partrial_link_text()
XPath find_element_by_xpath()
CSS_selector find_element_by_css_selector()

以百度为例

Copy
<input type="text" class="s_ipt" name="wd" id="kw" maxlength="100" autocomplete="off">

id定位#

  • id在html中唯一
  • id定位方法是通过元素的id来定位元素
    find_element_by_id("kw")

name定位#

  • name在html中用来指定元素的名称
  • name定位是通过元素的name来定位元素
    find_element_by_name("wd")

tag定位#

  • html中,通过tag来定义不同页面的元素,如input用来定义输入框
  • tag定位是通过元素的标签名来定位元素
    find_element_by_tag_name("input")

class定位#

  • class在html中用来指定元素的类名
  • class定位是通过元素的class来定位元素
    find_element_by_class("s_ipt")

link_text定位#

  • link_text定位是专门用来定位文本链接
  • link_text定位是通过元素标签对之间的文字信息来定位元素
Copy
<a href="http://news.baidu.com" target="_blank" class="mnav c-font-normal c-color-t">新闻</a>

find_element_by_link_text("新闻")

partrial link定位#

  • partrial link是对link定位的补充,有些文件链接比较长,可以取文字链接的部分文字进行定位,只要这个部分文字可以唯一表示这个链接
  • partrial link定位是通过元素标签对之间的部分文字信息来定位元素
Copy
<a href="http://news.baidu.com" target="_blank" class="mnav c-font-normal c-color-t">一个很长的文本链接</a>

find_element_by_partrial_link_text("文本链接")

XPath定位#

绝对路径定位#

  • 用标签名的层级关系来定位元素的绝对路径。F12可复制
    find_element_by_xpath("/html/body/div[1]/div[2]/div[5]/div[1]/div/form/span[1]/input")

元素属性定位#

  • 用元素的属性来定位。F12可复制
    find_element_by_xpath(//*[@id="kw"])

CSS_selector定位#

以百度为例

Copy
<span class="soutu-btn"> <input type="text" class="s_ipt" name="wd" id="kw" maxlength="100" autocomplete="off"> </span>

通过class定位#

find_element_by_css_selector(".s_ipt")

"."表示通过通过class定位元素

通过id定位#

find_element_by_css_selector("#kw")

"#"表示通过通过id定位元素

通过标签名定位#

find_element_by_css_selector("input")

用标签名定位时需要任何符号标识,直接使用标签名

通过标签层级关系定位#

find_element_by_css_selector("span > input")
查找span中所有标签为input的子元素

通过属性定位#

find_element_by_css_selector("[name='wd']")
使用元素的属性定位,如name,只要这个属性能唯一标识这个元素

组合定位#

find_element_by_css_selector("span > input#wd")
查找span中所有标签为input的子元素,并且元素的name属性为wd

注:

  1. 理想情况下,元素都有唯一的id和name,通过他们来定位即可。但大多数情况下没有id、name,或属性重复,这种情况下需要XPath、CSS定位。
  2. Xpath和CSS比较,CSS语法更加简洁,但是理解和使用难度大,但定位速度比XPath快。这两种方法掌握一种即可解决大部分定位问题。

find_element和find_elements区别#

  1. 只查找一个元素的时候:可以使用find_element(),find_elements()
    find_element()会返回一个WebElement节点对象,但是没找到会报错,而find_elements()不会,会返回一个空列表

  2. 查找多个元素的时候:只能用find_elements(),返回一个列表,列表里的元素全是WebElement节点对象

  3. 如果想要获取元素的相关内容(只对find_element()有效,列表对象没有这个属性) 使用 .text;

  4. 如果想要获取元素相关属性的值(如href对应的链接等,只对find_element()有效,列表对象没有这个属性):使用 .get_attribute("href")

posted @   是小鱼呀  阅读(1319)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
点击右上角即可分享
微信分享提示
目录