【问题标题】:How to wait for the for loop to finish before next statement in Python (and Selenium)?如何在 Python(和 Selenium)中的下一条语句之前等待 for 循环完成?
【发布时间】:2021-07-25 03:36:59
【问题描述】:

我有一个包含 10 个元素的列表。当我在列表中找到匹配项时,我想单击该元素。如果没有元素匹配,我想转到“下一页”。 (实际上是同一个页面,但是列表中加载了新的异步列表元素。两个列表具有相同的 xpath。)然后我想搜索新页面并单击一个元素,如果它匹配。代码如下:

for xpath in list: # loop through elements
    element = WebDriverWait(driver, 40).until(EC.presence_of_all_elements_located((By.XPATH, xpath)))
    element = driver.find_element_by_xpath(xpath) # element fresh each time! no staleness here
    match = re.search(patternForFindingListItem, element.text) #if match then click on the element/item
    if match:
        element.click()
        break
    
if match == None: #want to go to next 10 items (notes) on "next page" (it is the same page but new loaded data via JavaScript) via next-button to see if there is a match there
    elementButton = driver.find_element_by_xpath(xpathNextButton)
    elementButton.click()

问题是它在 for 循环在“第一页”上完成之前到达“下一页”。我们如何才能等待循环完成才能进入下一页?

【问题讨论】:

  • 尝试将第二个 if 语句放入 for 循环中
  • 执行element.click()时会发生什么?我在想,如果发生element.click() 或您定义的其他内容,您可能需要等待一段时间才能单击下一步按钮。

标签: python selenium


【解决方案1】:

这里有几个可能的问题:

  1. WebDriverWait(driver, 40).until(EC.presence_of_all_elements_located((By.XPATH, xpath))) 不会等到所有匹配 xpath 的元素都出现。一旦找到至少一个匹配项,它将返回。
  2. element = driver.find_element_by_xpath(xpath) 根据前面的代码行,我猜您正在尝试在这里获取元素列表,而不是单个元素。如果是这样,你应该在这里使用find_elements_by_xpath,所以它将是elements = driver.find_elements_by_xpath(xpath)
  3. 不清楚你在这里做什么:re.search(patternForFindingListItem, element.text)...

【讨论】:

    猜你喜欢
    • 2014-10-13
    • 1970-01-01
    • 2021-02-15
    • 1970-01-01
    • 2021-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多