selenium的元素定位

1.元素定位的常用方法

        1.1 根据id定位

        (下图代码为定位到"http://www.baidu.com"的输入框)

from selenium import webdriver
driver = webdriver.Firefox()
driver.get('http://www.baidu.com')
driver.find_element_by_id("kw")

        1.2 根据name定位

        (下图代码为定位到"http://www.baidu.com"的输入框)

from selenium import webdriver
driver = webdriver.Firefox()
driver.get('http://www.baidu.com')
driver.find_element_by_name("wd")

      1.3 根据class_name定位

        (下图代码为定位到"http://www.baidu.com"的输入框)

from selenium import webdriver
driver = webdriver.Firefox()
driver.get('http://www.baidu.com')
driver.find_element_by_class_name("s_ipt")

      1.4 根据tag_name定位

        因为一个页面中可能会存在多个相同的tag_name,因此会返回一个元素列表,定位其中的某个元素需要使用索引

        下图代码为查出百度页面下的所有input标签,并返回每个元素的html代码

from selenium import webdriver
driver = webdriver.Firefox()
driver.get('http://www.baidu.com')
data = driver.find_elemrnts_by_tag_name("input")
for i in data:
    print(i)

        1.5  定位超链接标签  根据超链接名进行定位,只能定位超链接文本

                下图代码为定位到百度首页的新闻元素

from selenium import webdriver
driver = webdriver.Firefox()
driver.get('http://www.baidu.com')
driver.find_elemrnts_by_link_text("新闻")

如果元素名很长,可以使用模糊匹配

from selenium import webdriver
driver = webdriver.Firefox()
driver.get('http://www.baidu.com')
driver.find_elemrnts_by_partial_link_text("新")

 2.xpath定位

        xpath定义:xpath是在xml文档内查找信息的语言,HTML就是标准的xml,因此在HTML中也可以使用xpath

        为什么要使用xpath定位:xpath可以在元素没有id,name,class_name等属性时定位元素

        2.1 标签+属性进行xpath定位

                下图为定位到百度首页的搜索框位置

                语法://标签名[@属性名=属性值]

from selenium import webdriver
import time
driver = webdriver.Firefox()
driver.get('http://www.baidu.com')
driver.find_element_by_xpath('//input[@maxlength="255"]')

        2.2 层级定位

                语法://标签名[@属性名=属性值]/子标签 只找子标签下的

                        //标签名[@属性名=属性值]//子标签 找到该标签下所有符合条件的子标签

from selenium import webdriver
import time
driver = webdriver.Firefox()
driver.get('http://www.baidu.com')
driver.find_element_by_xpath('//input[@maxlength="255"]')

        2.3索引定位,索引从1开始,索引只计算同级标签

                语法://标签名/子标签名[索引值]

from selenium import webdriver
import time
driver = webdriver.Firefox()
driver.get('http://www.baidu.com')
driver.find_element_by_xpath('//form/span[1]/input')

        2.4 模糊匹配

                语法://标签名[contains(@属性名,部分属性值)]

from selenium import webdriver
import time
driver = webdriver.Firefox()
driver.get('http://www.baidu.com')
driver.find_element_by_xpath('//form/span[contains(@class,"quickdelete-wrap")]/input')

        2.5多条件查找

                语法://标签名[属性名1=属性值1 and 属性名2=属性值2]

from selenium import webdriver
import time
driver = webdriver.Firefox()
driver.get('http://www.baidu.com')
driver.find_element_by_xpath('//input[@type = "hidden" and @name="rn"]')

3.CSS选择器定位

        css选择器是什么?

                css是html的一种匹配模式,用于绑定页面样式

                标签选择器,类选择器,id选择器,子选择器,包含选择器,选择器分组

        为什么要使用css定位?

                selenium官方推荐使用,相较于xpath速度更快,语法更简单

        3.1标签+属性定位

        语法:

                标签名[属性名=属性值]     使用id+标签定位

                #id属性值                          直接使用id属性值定位

                .类属性值                          直接使用类属性值

from selenium import webdriver
import time
driver = webdriver.Firefox()
driver.get('http://www.baidu.com')
driver.find_element_by_css_selector('input[id="kw"]')
# driver.find_element_by_css_selector('#kw')
# driver.find_element_by_css_selector(".s_ipt")

        3.2层级定位(注意空格和>的区别)

                语法:

                        标签名[属性名=属性值] 子标签 会选择该标签及其子标签下的所有子标签

                        标签名[属性名=属性值]>子标签 会选择该标签及其子标签

from selenium import webdriver
import time
driver = webdriver.Firefox()
driver.get('http://www.baidu.com')
ele = driver.find_element_by_css_selector("form[id='form'] input")
print(ele.get_attribute('outerHTML'))

        3.3索引定位(注意空格和>的区别)

                标签名[属性名=属性值] nth-child(索引值) 会选择该标签及其子标签下的所有子标签的所有符合索引值要求的

                标签名[属性名=属性值]>nth-child(索引值) 只选择该标签下的满足索引值的标签

from selenium import webdriver
import time
driver = webdriver.Firefox()
driver.get('http://www.baidu.com')
ele = driver.find_element_by_css_selector(form[id='form']>:nth-child(1))
print(ele.get_attribute('outerHTML'))

        3.4 模糊匹配

                语法:

                        标签名[属性名*=部分属性值]

from selenium import webdriver
import time
driver = webdriver.Firefox()
driver.get('http://www.baidu.com')
ele = driver.find_element_by_css_selector('input[autocomplete*="of"]')
print(ele.get_attribute('outerHTML'))

        3.5 多条件查找

                语法:

                        标签名[属性名1=属性值1][属性名2=属性值2]

from selenium import webdriver
import time
driver = webdriver.Firefox()
driver.get('http://www.baidu.com')
ele = driver.find_element_by_css_selector('input[type="hidden"][name="f"]')
print(ele.get_attribute('outerHTML'))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值