python强化20日 第六天

python强化20日(强行非蓝桥日)

第六天 web自动化 selenium的详细使用 含xpath用法

x.path 选择器的使用

  1. 绝对路径选择 如果输入下面的表达式:/html/body/div
  • 这个表达式表示选择html下面的body下面的div元素。
  • 注意: / 有点像 CSS中的 > , 表示直接子节点关系
    案例: elements = driver.find_elements_by_xpath("/html/body/div")
  1. 相对路径选择
  • 如果使用css表达式,直接写一个 div 就行了。
  • xpath需要前面加 // , 表示从当前节点往下寻找所有的后代元素,不管它在什么位置。 所以xpath表达式,应该这样写: //div
    案例:elements = driver.find_elements_by_xpath("//div//p")
  1. 通配符
  • 如果要选择所有div节点的所有直接子节点,可以使用表达式 //div/*

  • 是一个通配符,对应任意节点名的元素,等价于CSS选择器 div > *
    代码如下:
    elements = driver.find_elements_by_xpath("//div/*")
    for element in elements:
    print(element.get_attribute(‘outerHTML’))

  1. 根据属性选择
  • Xpath 可以根据属性来选择元素。
  • 根据属性来选择元素 是通过 这种格式来的 [@属性名=‘属性值’]
    选择 id 为 west 的元素,可以这样 //*[@id=‘west’]
    案例 :选择所有 select 元素中 class为 single_choice 的元素,可以这样 //select[@class=‘single_choice’]
    选择含有class属性的 [@class]
    *如果一个元素class 有多个,比如

    北京


    如果要选它,对应的 xpath 就应该是 //p[@class=“capital huge-city”]
    不能只写一个属性,像这样 //p[@class=“capital”] 则不行
  1. 根据其他属性
  • 比如选择 具有multiple属性的所有页面元素 ,可以这样 //*[@multiple]
  1. 属性值包含字符串
  • 要选择 style属性值 包含 color 字符串的 页面元素 ,可以这样 //*[contains(@style,‘color’)]
  • 要选择 style属性值 以 color 字符串 开头 的 页面元素 ,可以这样 //*[starts-with(@style,‘color’)]
  • 要选择 style属性值 以 某个 字符串 结尾 的 页面元素 ,大家可以推测是 //*[ends-with(@style,‘color’)], 但是,很遗憾,这是xpath 2.0 的语法 ,目前浏览器都不支持
  1. 按次序选择
  • 要选择 p类型第2个的子元素,就是//p[2]
    注意,选择的是 p类型第2个的子元素 , 不是 第2个子元素,并且是p类型 。
  • 要选取父元素为div 中的 p类型 第2个 子元素 //div/p[2]
  • 选择父元素为div的第2个子元素,不管是什么类型 //div/*[2]
  • 选取p类型倒数第1个子元素 //p[last()]
  • 选取p类型倒数第2个子元素 //p[last()-1]
  • 选择父元素为div中p类型倒数第3个子元素 //div/p[last()-2]
  1. 范围选择
    选取option类型第1到2个子元素 //option[position()<=2] 或者 //option[position()❤️]
    选择class属性为multi_choice的前3个子元素 //[@class=‘multi_choice’]/[position()<=3]
    选择class属性为multi_choice的后3个子元素 //[@class=‘multi_choice’]/[position()>=last()-2] 注意:为什么不是 last()-3 呢? 因为
    last() 本身代表最后一个元素
    last()-1 本身代表倒数第2个元素
    last()-2 本身代表倒数第3个元素
    组选择、父节点、兄弟节点
  2. 组选择
    要选所有的option元素 和所有的 h4 元素,可以使用 //option | //h4 等同于CSS选择器 option , h4
    要选所有的 class 为 single_choice 和 class 为 multi_choice 的元素,可以使用:
    //[@class=‘single_choice’] | //[@class=‘multi_choice’] 等同于CSS选择器
    .single_choice , .multi_choice
  3. 选择父节点
    要选择 id 为 china 的节点的父节点,可以这样写 //[@id=‘china’]/… 。
    当某个元素没有特征可以直接选择,但是它有子节点有特征, 就可以采用这种方法,先选择子节点,再指定父节点。
    可以继续找上层父节点,比如 //
    [@id=‘china’]/…/…/…
  4. 兄弟节点选择
    要选择 class 为 single_choice 的元素的所有后续兄弟节点 //[@class=‘single_choice’]/following-sibling::
    等同于CSS选择器 .single_choice ~ *
    要选择后续节点中的div节点, 就应该这样写 //[@class=‘single_choice’]/following-sibling::div
    要选择 class 为 single_choice 的元素的所有后续兄弟节点 //
    [@class=‘single_choice’]/preceding-sibling:😗
    案例:
  5. 先寻找id是china的元素
    china = wd.find_element_by_id(‘china’)
  6. 再选择该元素内部的p元素¶
    elements = china.find_elements_by_xpath(’//p’)
  7. 打印结果
    for element in elements: print(’----------------’) print(element.get_attribute(‘outerHTML’)) 运行发现,打印的 不仅仅是 china内部的p元素, 而是所有的p元素。
    要在某个元素内部使用xpath选择元素, 需要 在xpath表达式最前面加个点
    像这样: elements = china.find_elements_by_xpath(’.//p’)

详细内容

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值