带seleniumwait的异步函数

2024-06-10 05:54:55 发布

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

我正在使用Python构建Selenium Chrome机器人。我实现了一个同步函数。将Selenium wait方法与python一起使用,可以实现同步功能

我犯了一个错误,这不是我所期望的

我在下拉列表A中选择项,等待几秒钟,以便根据下拉列表A中项的值填充下拉列表B

这个过程在python中封装了一个带有wait的同步函数。它不会根据此行为循环

但是一次跑完

异步定义

regionLists = ['111','222','333']
regionElem = self.browser.find_element_by_id("regionId")
regionSelect = Select(regionElem)
regionTasks = [
  self.parseCities(self.browser, regionSelect, regionValue)
  for regionValue in regionLists
]

result = await asyncio.wait(regionTasks)

解析城市功能

async def parseCities(self, browser, regionSelect, regionValue):
  regionSelect.select_by_value(regionValue)

  # ERROR AT THIS LINE BELOW
  wait(browser, 10).until(
      lambda b: len(Select(b.find_element_by_id("cityId")).options) > 1
  )

错误

Task exception was never retrieved
future: <Task finished coro=<main.parseCities() done, defined at Selenium/main.py:139> exception=NoSuchElementException('Cannot locate option with value: 781111')>
Traceback (most recent call last):
  File "Selenium/main.py", line 140, in parseCities
    regionSelect.select_by_value(regionValue)
  File "/usr/local/lib/python3.7/site-packages/selenium/webdriver/support/select.py", line 87, in select_by_value
    raise NoSuchElementException("Cannot locate option with value: %s" % value)
selenium.common.exceptions.NoSuchElementException: Message: Cannot locate option with value: 781111

Tags: inpyselfbrowser列表byvaluemain
1条回答
网友
1楼 · 发布于 2024-06-10 05:54:55

尝试等待元素可单击

只是一个例子

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ec

 element = WebDriverWait(driver, 30).until(
    ec.element_to_be_clickable((By.ID, 'cityId')))

  element.click()

相关问题 更多 >