python - 选择同一节点的元素
问题描述
我正在用 Python 编写 Selenium 自动化脚本。作为一个过程,我需要收集一些元素。下面是示例 html(我进行了编辑以使其看起来很简单)。当我执行搜索时,我得到类似于下面的搜索结果。
现在,我需要餐厅中的元素列表并执行一些操作。酒吧、购物、咖啡也是如此。
事情是 lh 和 li 处于同一节点级别。
我尝试了以下 xpath,但它只选择 lh 元素
//ul[@id='searchresults']//ancestor::lh
我还阅读了有用的 Concept XML XLST 前兄弟和祖先。但是,还没有想出解决办法
示例 html 代码:
<ul id="searchresults">
<lh style="">Restaurants</lh>
<li title="Chamber"><span>Chamber</span></li>
<li title="Chillies"><span>Chillies</span></li>
<li title="Sushi Ville"><span>Sushi Ville</span></li>
<li title="Toasters"><span>Toasters</span></li>
<li title="Joe Grills"><span>Joe Grills</span></li>
<lh style="">Bars</lh>
<li title="Y Cocktails"><span>Y Cocktails</span></li>
<li title="Z Brewery"><span>Z Brewery</span></li>
<li title="X Drinks"><span>X Drinks</span></li>
<lh style="">Shopping</lh>
<li title="Pacific"><span>Pacific</span></li>
<li title="Spencers"><span>Spencers</span></li>
<li title="Hays"><span>Hays</span></li>
<lh style="">Coffee</lh>
<li title="Roasters"><span>Roasters</span></li>
<li title="Coffee Beans"><span>Coffee Beans</span></li>
<li title="Coffee Cafe"><span>Coffee Cafe</span></li>
</ul>
非常感谢您的帮助,请让我知道我缺少或需要的任何信息,这将有助于解决这个问题。
解决方案
您可以执行以下操作:
- 遍历“列表标题”元素
- 对于每个“列表标题”,获取以下兄弟并收集“标签”(我们将这些
li
元素文本命名为“标签”),直到lh
遇到兄弟
这些方面的东西:
for lh in driver.find_elements_by_xpath("//ul[@id='searchresults']//lh"):
restaurant = lh.text
tags = []
for element in lh.find_elements_by_xpath("./following-sibling::*"):
if element.tag_name == 'lh':
break
tags.append(element.text)
print(restaurant, tags)
推荐阅读
- javascript - 在位置更改 ReactJs 上保持参数一致
- python - 检查包含数字的列中是否有字符串
- postgresql - Get day name based on custome ID of bigint[] datatype
- list - PowerBI和SharePoint列表:如何统计PID值等于每行UID的行数(第3列需要公式)
- flutter - Flutter image.network() 使应用程序崩溃
- vue.js - 如何在 Vue 中使用 Pug 数组?
- php - php、shell 和 git 克隆
- javascript - 显示表格结果信息的功能
- scala - 使用 Gradle 的 Play 应用程序中的 Swagger API 文档
- python - 计算列表中某个值被超出的次数