python - 如何区分包含相同文本的元素 Python Selenium
问题描述
我正在尝试获取用户输入以浏览网站。我试图根据用户输入来识别网页中的元素,但是有时用户输入的字符串会匹配多个元素,因此我会点击错误的元素。
search = input("Enter something to search for")
elem = browser.find_elements_by_xpath(f'//span[text()="{search}"]')
是否有任何提示可以识别动态环境中的元素?我在想也许我可以通过两个标准来识别元素——比如它与文本匹配(如上所述),但也可以通过其他两个元素没有的属性来识别?
由于它是动态的,因此我可以基于搜索的设置属性并不多(我不会预先知道类名或 id)。我唯一能想到在字符串匹配之上添加的是外部类的文本,因为这在我将进行的所有搜索中都是一致的,但我不确定这是否可能?
任何在动态环境中识别元素的技巧都值得赞赏。
具有完全相同文本的三个元素的 xpath 是:
/html/body/div[3]/div/div/div[1]/div/div/div/div/div/div/div/div[2]/div/div[1]/li/button/span/ul/li/span[2]/span
/html/body/div[3]/div/div/div[1]/div/div/div/div/div/div/div/div[2]/div/div[2]/li[1]/a/span/ul/li[1]/span/span
/html/body/div[3]/div/div/div[1]/div/div/div/div/div/div/div/div[2]/div/div[2]/li[2]/a/span/ul/li[1]/span[1]/span
其中一个元素的示例(它们都看起来像这样):
<span class="ccl-19882374e640f487 ccl-1daa0367dee37c3b">TEXT</span>
还有一个 h4 “title” 标签,位于一些匹配元素的上方:
<h4 class="ccl-2a4b5924e2237093 ccl-21bead492ce4ada2 ccl-706ed5a06ead17d8 ccl-2b95b58eee016846">Categories</h4>
下面的问题截图。当您搜索“伦敦”的酒店时,您会在Locations标题下获得多个元素的列表,在Properties标题下获得多个元素。我想单击出现在属性标题下的第一个元素。这只是一个示例,它会根据用户搜索的位置而有所不同,因此可能并不总是返回已知数量的位置/属性 - 可能永远不会返回任何位置!
谢谢
解决方案
也许简单地添加 if 语句会有所帮助:
search = input("Enter something to search for")
elem = browser.find_elements_by_xpath(f'//span[text()="{search}"]')
if len(elem) > 1:
elem[0].click() # select the element you want to click from the list
如果列表中的元素将包含一些额外的属性,您可以通过这种方式过滤它们:
search = input("Enter something to search for")
elem = browser.find_elements_by_xpath(f'//span[text()="{search}"]')
if len(elem) > 1:
elem.find_element_by_css_selector('type_of_selector[class="some_class"]')
您能否提供有关这些元素的更多详细信息,我们将考虑解决方案。问候!
推荐阅读
- python - 当我在带有掩码的 python 中使用 cv2.goodFeaturesToTrack 时,出现以下错误
- reactjs - Object(...) 不是函数
- ios - 在 webview 上禁用缩放
- python - Python:向字典中的现有值添加重要值
- android - Logcat 不只显示错误
- laravel - Laravel Envoy 设置任务未成功完成
- mysql - 将 Sql 数据导出到 .csv 并根据查询为每个表生成单独的 .csv 文件
- java - 未处理的异常,而我清楚地处理 Java 中的异常
- javascript - jQuery这个选择器在函数中不起作用
- vb.net - 如何在不使用 sleep 命令的情况下在 VB 中发出等待命令?