Selenium xpath无法解析的如何处理

452 阅读2分钟

Selenium xpath无法解析的如何处理

一、问题描述

  • Xpath无法解析的原因

    1. 使用selenium加载时没有加入等待时间,导致页面元素无法加载xpath无法解析

    2. xpath语句未能准确定位

    3. 如果xpath无法解析到怎么办

    4. xpath点击失效(报错:该元素不是可点击元素)(客户端渲染,需要研究分析js代码实现同等效果的操作;或者通过火狐浏览器对js代码点击事件进行研究)

二、解决办法

1

​ <1> 用time.sleep(3)方法休眠等待

​ <2> 用显示等待或隐式等待

2

​ <1> 使用google插件XpathHelper定位

​ <2> 在Chrome浏览器中按F12打开调试模式,在Elements页面按Ctrl + F进行搜索定位

3

  • 情景一:页面不规则

    <1> 待页面加载完毕后,通过driver.page_source方法获取页面源码,通过正则匹配进行定位抓取

  • 情景二:页面规则

    <1> 复制chrome full xpath 绝对定位

    <2> 通过部分唯一标签或者元素部分绝对定位(元素唯一的情况下)

    <3> 用过js进行元素获取

4

​ <1> 用过js进行元素获取

​ <2> 通过键盘的Enter\上下左右\Tab按钮属性等其他按键操作定位

键值解释
send_keys(Keys.BACK_SPACE)删除键BackSpace
send_keys(Keys.SPACE)空格键Space
send_keys(Keys.TAB)制表键Tab
send_keys(Keys.ESPACE)回退键Esc
send_keys(Keys.ENTER)回车键Enter
send_keys(Keys.CONTROL,‘a’)全选Ctrl+A
send_keys(Keys.CONTROL,‘c’)复制CTRL+C
send_keys(Keys.CONTROL,‘x’)剪切CTRL+X
send_keys(Keys.CONTROL,‘v’)粘贴Ctrl+V
send_keys(Keys.F1)键盘F1
send_keys(Keys.F12)键盘F12

三、高级Xpath用法(扩展延伸)

1、 模糊查询

  • //ul/li[text()="经验教程"] --全文字匹配
  • self.driver.find_element_by_link_text()
  • xpath('//div[contains(@class,"a")]') #它会取得所有class为a的元素
  • xpath('//div[contains(@class,"a") and contains(@class,"b")]') #它会取class同时有a和b的元素
  • //a[contains(text(), "搜索")] --模糊文字匹配
  • //li[contains,(.,'单次预约')]
  • //div[contains(@class, 'demo')] 【特殊元素标签模糊匹配用法】
  • //div[contains(@class, 'demo') and contains(@class, 'other')] 【多个元素的组合模糊定位】

2、常用解析

  • 解析文字:post_time = selector.xpath('//div[@class="video-data"]/span/text()')

  • 解析结果:['295播放\xa0·\xa0', '0弹幕', '2020-12-05 09:00:01']

  • 普通解析

    extract() 返回一个包含有字符串的列表,配合[0]使用

    extract_first() 返回列表中的第一个字符串,列表为空没有返回None

    get() 提取列表中第1个文本内容(等同于extract_first())