如何使用Selenium(Python)查找包含特定文本的大量元素

2024-04-26 03:10:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我想检查浏览器是否能够查找包含不同单词的大量不同元素。 我有时在这种情况下使用此代码:

try:

    elemtwo = WebDriverWait(browser, 2, poll_frequency=0.1, ignored_exceptions=None).until(
        EC.element_to_be_clickable((By.XPATH, "//*[contains(text(), ' first example of text')]")))
    if elemtwo:
        break

except NoSuchElementException and TimeoutException:
    pass
try:
    elem = WebDriverWait(browser, 2, poll_frequency=0.1, ignored_exceptions=None).until(
        EC.element_to_be_clickable((By.XPATH, "//*[contains(text(), 'second example of text')]")))
    if elem:
        break

except NoSuchElementException and TimeoutException:
    pass   

如果我有20个不同的单词,我应该怎么做才能通过尽可能少的书写找到它们? 让我更好地解释一下:例如,我有一个20个单词的列表,如下所示:

  • 警察
  • 苹果
  • 猴子
  • ecc

我应该怎么做才能不写相同的命令{browser.find_element_by_xpath("//*[contains(text(), "one of the list's word")]")}20次

第一次编辑:对不起,我没有指定上述20个单词或文本是我任意选择的,无论它们与网站的相关性如何


2条回答

您可以通过xpath查找元素,而不是通过xpath查找元素,然后进行迭代

编辑-以下是我编写的代码,用于遍历页面上的链接列表

从selenium导入webdriver

chromePath=“chromedriver.exe”

driver=webdriver.Chrome(chromePath)

url=”http://books.toscrape.com/"

获取驱动程序(url)

elems=driver.find_elements_by_xpath(“//a[@href]”)

对于元素中的元素:

print(elem.get_attribute("href"))

硒有两种方法

find_elementfind_elements

查找元素:-查找元素将返回单个web元素,其中

查找元素:-将返回web元素列表

所以与其写这个

browser.find_element_by_xpath("//*[contains(text(), "a list's word")]")

n次

你可以简单地做

browser.find_elements_by_xpath("//*[contains(text(), "a list's word")]")

注意:xpath //*[contains(text(), "a list's word")]应该在UI中表示多个web元素,否则,如果恰好是单个web元素,则最终将使用单个web元素

现在我看到你正在使用Explict等等,所以在这种情况下

您有很多选择,例如:

presence_of_all_elements_located

visibility_of

它们都将返回一个web元素列表,因此当您执行以下操作时:

list_of_ele = wait.until(EC.presence_of_all_elements_located((By.XPATH, 'some xpath')))

现在迭代它,或者做Python允许您使用此列表执行的任何操作

请在此处阅读更多信息:

Selenium - official docs

更新1:

list = ['apple', 'police', 'etc', 'something else']
counter = 0
for search in list:
    driver.find_element_by_xpath("//html/body/"+ list[counter])
    counter = counter  +1

相关问题 更多 >