IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Python自学笔记21-selenium中的Xpath元素定位方法&爬虫实践 -> 正文阅读

[Python知识库]Python自学笔记21-selenium中的Xpath元素定位方法&爬虫实践

Xpath

xpath学习地址:https://www.w3school.com.cn/xpath/index.asp

什么是xpath?

  • XPath是XML的路径语言,通俗一点讲就是通过元素的路径来查找到这个标签元素

  • XPath使用路径表达式在XML文档中进行导航

  • 普通语法

注意!

1.xpath中的值用引号引起来时,在代码中要注意区分,内单外双,内双外单。

2.xapth的class的值要填写全部,注意与find_element_by_class_name的区别。

3.xpath还支持逻辑运算符and/or,多用and来缩小范围,例如//*[@id='username' and @type='text']

4.要注意xpath中//input[1]代表第一个input标签,而不是用0,与python中的下标索引不同。

  • xpath轴语法

自动化测试中不常用,爬虫中常用,仅做了解。

学习网址:https://www.w3school.com.cn/xpath/xpath_axes.asp

ancestor#选取当前节点的所有先辈(父、祖父等)。
ancestor-or-self#选取当前节点的所有先辈(父、祖父等)以及当前节点本身。
attribute#选取当前节点的所有属性。
child#选取当前节点的所有子元素。
descendant#选取当前节点的所有后代元素(子、孙等)。
descendant-or-self#选取当前节点的所有后代元素(子、孙等)以及当前节点本身。
following#选取文档中当前节点的结束标签之后的所有节点。
namespace#选取当前节点的所有命名空间节点。
parent#选取当前节点的父节点。
preceding#选取文档中当前节点的开始标签之前的所有节点。
preceding-sibling#选取当前节点之前的所有同级节点。
self#选取当前节点。

selenium中使用xpath

为了练习,我自己想了个需求。

用selenium的xpath定位方式写一个脚本,获取微博热搜内容

步骤

1.打开微博官网https://weibo.com

2.找到热搜榜按钮位置,点击

3.找到热搜标题位置,获得文本

打开微博官网后我们找到热搜榜按钮,然后右键--检查,找到我们要点击的位置

发现这个标签里的属性比较多,所以首先尝试用属性法看能不能找到

通过role='link'找到4个,不唯一。

换title试试

咦,如此简单么,找到了


接下来找热搜标题的xpath路径

先手动复制热搜榜前五标题的xpath路径

方法:选中标题位置--右键检查

找到对应标签行后,再右键--复制--XPath

得到前五条热搜名称的xpath路径,并观察规律

然后尝试精简路径。用尽可能短的路径定位到唯一元素(因为我发现路径太长,会概率性出现定位不到元素)

根据找到的规律(变化最明显的点和最有识别度的标签名称)对路径进行简化,经过无数次的调试(我太菜了)

精简后热搜第一名的可用路径为

//main/div//div[2]//*[starts-with(@class,'HotTopic_tit_')]

ok,xpath的路径准备好之后,就可以写代码了

from?selenium?import?webdriver
from?time?import?sleep
driver?=?webdriver.Firefox()#打开浏览器
url?=?'https://weibo.com'
driver.get(url)#打开微博官网
sleep(5)
driver.find_element_by_xpath("//*[@title='热搜榜']").click()#找到热搜榜并点击
for?i?in?range(2,7):
????sleep(1)
????print(f'此时此刻热搜第{i-1}名为:'+driver.find_element_by_xpath(
????????f"//main/div//div[{i}]//*[starts-with(@class,'HotTopic_tit_')]").text)

结果如下

此时此刻热搜第1名为:张雪峰提议三胎家庭免学费
此时此刻热搜第2名为:浙江疫情
此时此刻热搜第3名为:读懂中央经济工作会议的深意
此时此刻热搜第4名为:医生建议看手机1小时后休息一下
此时此刻热搜第5名为:雪梨淘宝店铺被封

试了几次,成功率还是挺高的。

有点开心。

再整一下豆瓣的电影排行榜

from?selenium?import?webdriver
from?time?import?sleep
driver?=?webdriver.Firefox()
url?=?'https:/douban.com'
driver.get(url)
driver.find_element_by_xpath('/html/body/div[1]/div[2]/div[1]/ul/li[2]/a').click()
#这用的完整的绝对路径
sleep(5)
driver.find_element_by_xpath("//div/ul/li/a[text()='排行榜']").click()
#找规律精简后的路径
for?i?in?range(1,11):
????sleep(2)
????print(f'豆瓣排行榜第{i}名:'+driver.find_element_by_xpath(f'//table[{i}]//a[@class=""]').text)

结果如下:

豆瓣排行榜第1名:最后的决斗?/?最后决斗(港)
豆瓣排行榜第2名:毒液2?/?毒魔:血战大屠杀(港)?/?猛毒2:血蜘蛛(台)
豆瓣排行榜第3名:倒数时刻?/?滴答,滴答……轰隆隆?/?梦想期限(港)
豆瓣排行榜第4名:芬奇?/?芬奇的旅程?/?生化
豆瓣排行榜第5名:不速来客?/?眼见为虚?/?Knock?Knock
豆瓣排行榜第6名:斯宾塞?/?斯潘塞?/?黛妃(台)
豆瓣排行榜第7名:Soho区惊魂夜?/?苏豪的最后一夜(港)?/?迷离夜苏活(台)
豆瓣排行榜第8名:圣母?/?圣欲(港/台)?/?圣母玛利亚
豆瓣排行榜第9名:红色通缉令?/?红色大贱谍
豆瓣排行榜第10名:古驰家族?/?GUCCI名门望族(港)?/?Gucci:豪门谋杀案(台)

ps:这部分刚学的,所以代码中的xpath路径虽然能满足需求,但应该还有很多更优的写法,大家私下可以教教我。

总结:

  • webUI的自动化元素定位是分析网页的一个过程

  • 绝对路径不稳定,基本不用,前边随便一个爷爷变了,孙子就找不到了。

  • 学习时先在浏览器的F12调试界面多试,确定好后再复制到代码里

  • 路径法和属性法要结合使用,找到定位元素最准确且精简路径

  • 属性值和网址这些东西,能复制尽量不要手敲

  • 刚开始学不要过度使用‘复制Xptah’,还是要先会写,再复制。

  • 根据基础用法实在定位不到元素,还有轴定位(要能想起来)。

  • 扫码关注公众号‘小鹏长翅’

    一起变强

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-12-13 12:46:15  更:2021-12-13 12:46:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 4:16:46-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码