python使用xpath文本定位元素
背景
今天用selenium爬“证券日报”的搜索页,前面的“获取源代码”、“数据提取”、“数据清洗”都挺顺利,就是到了这个翻页掉坑里去了。
问题与尝试解决
问题1
页面没有“下一页”!这提高了一些难度。
尝试解决1
使用edge的审查页面元素,发现翻页按钮都在<div class="pagination pagination-centered"><ul>
下,并且每个按钮的链接都被<li>……</li>
包围。
于是我尝试用正则表达式,将按钮的链接提取出来。
代码如下:
btn_re = re.compile('<li>.*?<a href="(.*?)">.*?<\/a>, re.S)
btn是一个列表,我使用page变量来标识每一页。
for page in range(2, 11):
btn = re.findall(btn_re, source) # source是网页源代码
wd.get(btn[page]) # wd = webdrive.Edge()
问题2
虽然我的链接提取正确,但它就是无法访问,返回的页面是空白。
尝试解决2
于是我决定用selenium的模拟点击来翻页。
我使用的css选择器来获取。
btn= 'body > div > div.pagination.pagination-centered > ul > li:nth-child(' str(page) ') > a'
wd.find_element_by_css_selector(btn_re)
于是成功翻页。
问题3
但又出现了新的问题。翻页的过程中,每个按钮对应的页码会发生变化,这就导致我爬取过程中会漏掉一些页面。
尝试解决3
但是我发现虽然按钮对应的页码会变,但是每个页码对应的文本不变。即页码和文本一直保持一对一的关系。
最终我采用了xpath的文本定位方法。
例如定位14按钮
# 浏览器直接复制xpath路径,得到
/html/body/div/div[2]/ul/li[10]/a
# 但我的目的是在<ul>中搜索<a对应的text,于是去掉<li[10]>中的索引,得到
/html/body/div/div[2]/ul/li/a
# 使用[text()="文本"]搜索,得到
/html/body/div/div[2]/ul/li/a[text()="文本"]
# 使用page变量来代表页码,得到可变的xpath路径
btn = r'/html/body/div/div[2]/ul/li/a[text()="' str(page) r'"]'
# 点击
wd.find_element_by_xpath(btn).click()
总结
在目标与文本一个一个地对应的时候,可以使用xpath根据文本定位目标。
语法
根据网上查到的资料,共有两种写法
# 精准定位,目标文本和我们搜索的文本完全相同
browser.find_element_by_xpath("//*[text()='文本']")
# 相对定位,目标文本包含我们搜索的文本
rowser.find_element_by_xpath("//*[contains(text(),'文本')]")
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhhaceie
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13