美文网首页
Python Selenium 疑难杂症解方(二): 定位

Python Selenium 疑难杂症解方(二): 定位

作者: MartinSi | 来源:发表于2020-09-05 13:20 被阅读0次

    定位方法

    Python Selenium的定位方法有以下8种:

    1. 通过id定位:

    driver.find_element_by_id('username')

    2. 通过name定位:

    driver.find_element_by_name('username')

    3. 通过xpath定位

    driver.find_element_by_xpath('//form/div/div[2]/div/div/div/div/input')

    4. 通过css_selector定位

    driver.find_element_by_css_selector('.el-form-item:nth-child(2) img')

    5. 通过class_name定位

    driver.find_element_by_class_name('el-input__inner')

    6. 通过link_text定位

    driver.find_element_by_link_text('确定')

    7. 通过tag_name定位

    driver.find_element_by_tag_name('link')

    8. 通过partial_link_text定位

    driver.find_element_by_partial_link_text("确定")

    实战技巧

    实际在编写脚本的过程中,用id和name的定位方式,往往只适用于简单的页面。对于复杂的页面,则更多的依赖css_selector和xpath两种方法。关于这两种方法有以下几个使用技巧:

    css_selector

    1. 可以使用Selenium IDE来帮助定位:打开Selenium IDE,输入项目信息后开始录制,点击想要定位的元素,就可以在IDE中看到对应的CSS:

    红框中的信息可以直接用于css_selector

    2. 采用css_selector同样会碰到不唯一的情况,这时就只能借助于xpath。

    xpath

    1. 同样,xpath也可以通过Selenium IDE来获取,点击需要定位的元素后,将定位方式改为xpath即可:

    在Target中更换定位方式为xpath即可

    2. 但是,有些页面中弹出的浮层,其div的次序在每次刷新页面后是随机的,比如:

    driver.find_element_by_xpath("//div[6]/div/div/ul/li[2]")

    其中的第一个div[6]中的数字6,在每次刷新页面的时候,都会不一样,此时就需要采用模糊定位的方法。

    以此页面为例,我们发现,在页面中当前弹出的浮层,其style属性中都会有“fixed”关键词,且在整个页面中“fixed”唯一:

    唯一的“fixed”

    所以我们采用contains来模糊定位这个元素:

    driver.find_element_by_xpath("//div[contains(@style, 'fixed')]/div/div/ul/li[2]")

    这样无论第一个div中的数字如何变化,每次刷新页面都可成功的定位到我们所需的元素上。

    3. xpath的模糊定位方法,一共有三种方法,分别是:

    属性中包含***(关键词可不连续):contains(@属性名, '***')

    属性以***开头:starts-with(@属性名, '***')

    属性以***结尾:ends-with(@属性名, '***')

    4. 注意:Chrome不支持ends-with语法。

    熟练掌握xpath的相对路径定位和模糊定位,基本就可以解决所有在实战中会碰到的各种无法定位的问题。

    相关文章

      网友评论

          本文标题:Python Selenium 疑难杂症解方(二): 定位

          本文链接:https://www.haomeiwen.com/subject/aytfektx.html