在 Python 中使用 Selenium webdriver 基于文本搜索元素
Search for element based on text using Selenium webdriver in Python
我正在尝试创建一个程序来点击包含特定单词的框,但是所有框周围都有其他单词。
例如,网站上有很多食谱,但我只想要包含单词 "soup" 的那些。因此,它需要能够点击 "tomato soup, "yummy soup"、"some other soup type soup" 等文字。
我找到了这条线。
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()
如果有人知道如何进行更松散的查找,那将是一个很大的帮助。谢谢。
如果您使用的是 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)
我正在尝试创建一个程序来点击包含特定单词的框,但是所有框周围都有其他单词。
例如,网站上有很多食谱,但我只想要包含单词 "soup" 的那些。因此,它需要能够点击 "tomato soup, "yummy soup"、"some other soup type soup" 等文字。
我找到了这条线。
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()
如果有人知道如何进行更松散的查找,那将是一个很大的帮助。谢谢。
如果您使用的是 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)