一、问题描述
- Xpath无法解析的原因
- 使用selenium加载时没有加入等待时间,导致页面元素无法加载xpath无法解析
- xpath语句未能准确定位
- 如果xpath无法解析到怎么办
- 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())