首页 > 解决方案 > 如何在 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)

如果有人可以帮助并让我知道我不理解的内容,我将不胜感激,谢谢。

标签: pythonseleniumxpathsearchtext

解决方案


根据评论中的附加信息,要在页面上的 FIRST POST 中搜索关键字,您可以使用以下 xpath:

(//article)[1]//div[@class='Post-body'][contains(normalize-space(),'point')]

关键位是:(//article)[1] - 它将进一步的标识符锁定在第一个[1]定位的article标签内。其余的只是减少 dom 中的重复,并在嵌套标签的结构中找到您的文本。

根据提供的链接,该链接仅与顶部帖子匹配。您可以看到搜索关键字“point”仅获得 1 次点击,即使它在多个帖子中... 点的 xpath

文本 '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")

我没有运行它,但如果它不起作用,请告诉我,我会再看一遍。


推荐阅读