python - 如何在 Selenium (Python) 网页的特定部分搜索文本?带图片:
问题描述
因此,我一直在尝试使用 python 中的 selenium 在网页上搜索特定关键字,但似乎无法弄清楚如何在特定区域中搜索特定文本。如图所示,当我在 chrome 中搜索“Sim”一词时,突出显示了几个点。红色区域是我在其中寻找代码的唯一地方。我使用 xpath 来识别文本,因为它们没有其他可用的。
这是到目前为止的代码:
else:
print("Nothing here yet 1")
if driver.find_elements_by_xpath("//*[contains(text(), 'Sim')]"):
login_to_reply = driver.find_element_by_xpath("//body/div[@id='app']/main/div[@id='content']/div/div/div/div/div/div/article/header[1]")
login_to_reply.click()
time.sleep(5)
如果有人可以帮助并让我知道我不理解的内容,我将不胜感激,谢谢。
解决方案
根据评论中的附加信息,要在页面上的 FIRST POST 中搜索关键字,您可以使用以下 xpath:
(//article)[1]//div[@class='Post-body'][contains(normalize-space(),'point')]
关键位是:(//article)[1]
- 它将进一步的标识符锁定在第一个[1]
定位的article
标签内。其余的只是减少 dom 中的重复,并在嵌套标签的结构中找到您的文本。
根据提供的链接,该链接仅与顶部帖子匹配。您可以看到搜索关键字“point”仅获得 1 次点击,即使它在多个帖子中...
文本 'point' 可以换成 'sim' 或任何你想过滤的东西。
看看你的代码,我还有一些建议:
1/你的第二个“登录回复”的xpath不是很好。像这样的长期复制的 xpath 通常是易碎且麻烦的。您可以使用与上述相同的技术单击该文章框中的回复:
(//article)[1]//button[span[text()='Reply']]
2/
您还需要注意,这条线不会像您预期的那样工作。
if driver.find_elements_by_xpath("//*[contains(text(), 'Sim')]"):
如果未找到该元素,它不会返回 false - 它会返回 NoSuchElement 异常并使脚本失败(并停止)。
你需要这是一个try/except 块
它需要看起来像这样:
try:
driver.find_elements_by_xpath("(//article)[1]//div[@class='Post-body'][contains(normalize-space(),'point')]"):
login_to_reply = driver.find_element_by_xpath("(//article)[1]//button[span[text()='Reply']]")
login_to_reply.click()
time.sleep(5)
except:
print("Text was not found")
我没有运行它,但如果它不起作用,请告诉我,我会再看一遍。
推荐阅读
- r - 使用 lubridate 更改 tibble 中的 tz
- reactjs - material-ui 日期选择器颜色变化
- c# - 如何组合来自两个 ConcurrentBags 的项目?
- c++ - 我的 cin 在我的 cin 之后我的代码崩溃了,我可以得到一些关于我做错了什么的建议吗
- common-lisp - Common Lisp - 如何使用关键字参数调用/应用函数?
- c++ - 我可以用什么代替 C++ 中的 (ios :: in ) 在我的代码中给出相同的结果?
- electron - 如何动态更改 MenuItem 的属性(如标签)?
- python - 比较字符串以分配标签
- momentjs - Momentjs 显示比预期多 1 天
- spring - 带有 pgBouncer 池的 Spring Boot 2