3、 find_element

find_element_demo


1、8种定位方式

  • 不管用什么方式,必须保证这种方式是唯一 (一个html中)

    <input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">
    <a href="http://news.baidu.com" name="tj_trnews" class="mnav">新闻</a>
    <a href="http://news.baidu.com" name="tj_trnews" class="mnav">很长的一句话</a>

# id
dr.find_element_by_id('kw')
# name
dr.find_element_by_name("wd" )
# class
dr.find_element_by_class_name("s_ipt")
#tag
dr.find_element_by_tag_name("input")   #理论上可以,但是有可能是通用属性,不唯一。我们可以查找一组元素,筛选想要的某一个元素

# link_text
dr.find_element_by_link_text("新闻")
dr.find_element_by_partial_link_text("很长")

xpath

  • //表示当前页面某个目录下,input表示定位元素的标签名,*表示匹配任何类型的标签,[ ]表示属性的定位方式

    <input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">

#xpath
dr.find_element_xpath("//*[@id='kw']")    # []外面用双引号,里面则用单引号;反之
dr.find_element_xpath('//*[@name="wd"]')
dr.find_element_xpath('//input[@class="s_ipt"]')    #最好使用标签名,不要用*
dr.find_element_xpath('//input[@maxlength="255"]')
  • input标签没有属性时,找父级
<span class="bg s_ipt_wr quickdelete-wrap">
    <span class="soutu-btn"></span>
    <input />
    <input />
</span>
dr.find_element_xpath("//span[@class='bg s_ipt_wr quickdelete-wrap']/input")       #只有一个<input />时
dr.find_element_xpath("//span[@class='bg s_ipt_wr quickdelete-wrap']/input[2]")    #查找第2个<input />
  • span、input都没有属性时
<form id="form" name="f" action="/s" class="fm">
    <span class="">
        <input />
        <input />
    </span>
</form>
dr.find_element_xpath("//form[@name='f']/span/input[2]")
  • 绝对路径
    • 优点:页面不发生变化,95% 可以通过该路径找到指定元素
    • 弊端:一旦页面发生一点点变化,该元素就找不到了
    • 不到万不得已,不推荐用这种定位方式
    • 容易出错,又臭又长,容易变化

dr.find_element_xpath("/html/body/div/div/div/div/div/div/from/span/input")     #html是开始位置,所以用/
  • 多条件属性
    <input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">
dr.find_element_xpath("//span[@class='bg....']/input[@id='kw' and @name='wd' and @class='s_ipt']")

css

#   # = id
dr.find_element_by_css_selector("#kw")

#   . = class
dr.find_element_by_css_selector(".s_ipt")

# 属性定位
dr.find_element_by_css_selector("[name='wd']")
dr.find_element_by_css_selector("input[maxlength = 255]")      

#层级、父子关系定位
dr.find_element_by_css_selector("span.bg s_ipt_wr quickdelete-wrap > input")
dr.find_element_by_css_selector("form#form.fm > span > input#kw")

#绝对路径
dr.find_element_by_css_selector("html > body > div > div > div > div > div > div > form > span > input")

  • 示例
from selenium import webdriver
dr = webdriver.Chrome()
dr.get("https://www.baidu.com/")

dr.find_element_by_xpath("//form[@class='fm']/span/input[@id='kw' and @name='wd']").send_keys('find')

dr.find_element_by_css_selector("span > input[type= submit]#su").click()

dr.quit()
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值