【问题标题】:Search for element based on text using Selenium webdriver in Python在 Python 中使用 Selenium webdriver 基于文本搜索元素
【发布时间】:2020-08-30 08:27:58
【问题描述】:

我正在尝试创建一个程序来单击包含某个单词的框,但是所有框周围都有其他单词。

例如,该网站有一堆食谱,但我只想要包含“汤”一词的食谱。所以它需要能够点击“番茄汤”、“美味汤”、“其他汤类汤”等文字。

我找到了这条线。

WebDriverWait(driver, 10).until(expected_conditions.element_to_be_clickable((By.XPATH, "//span[text()='Soup']"))).click()

这很好,但只有在您将确切的文本放入其中时才有效。 前任。 WebDriverWait(driver, 10).until(expected_conditions.element_to_be_clickable((By.XPATH, "//span[text()='Tomato Soup']"))).click()

如果有人知道如何进行更松散的查找,那将是一个很大的帮助。谢谢。

【问题讨论】:

    标签: python python-3.x selenium selenium-webdriver webdriver


    【解决方案1】:

    如果您使用的是 XPath 2.0,则可以使用正则表达式,因此请查找包含 Soup 的所有内容。

    //*[matches(@id, '.*Soup.*')]
    

    不妨看看How to use regex in XPath "contains" function

    更新

    browser = webdriver.Chrome()
    browser.get("https://www.allrecipes.com/search/results/?wt=Soup&sort=re&page=10")
    elems = browser.find_elements_by_xpath("//span[contains(text(), 'Soup')]")
    for elem in elems[:2]:
        print(elem.text)
    

    【讨论】:

    • 这是否适用于跨度文本和 python,因为我无法使用它。
    • 我没试过。您能否链接您正在使用的示例网站?
    • 所以您正在遍历所有页面以查找 Soup?我注意到也有动态加载。你为什么不使用像allrecipes.com/search/results/?wt=Soup 这样的搜索功能来检索那些食谱?目标是保存所有汤食谱的链接吗?
    • 不,我只是想找到包含“汤”的标题,然后单击它并打开该页面
    • 试试这个elems = browser.find_elements_by_xpath("//span[contains(text(), 'Soup')]")
    猜你喜欢
    • 2018-02-04
    • 1970-01-01
    • 2019-11-23
    • 1970-01-01
    • 2022-11-24
    • 1970-01-01
    • 1970-01-01
    • 2019-09-06
    • 1970-01-01
    相关资源
    最近更新 更多