selenium,python - 无论我将延迟设置为多少,WebDriverWait 都会在 60% 的时间内超时

selenium, python - WebDriverWait times out 60% of the time no matter what I set the delay to

回溯

09:32:01 Traceback (most recent call last):
  File "/home/mike/projects/work/blacklight/venv/lib/python3.8/site-packages/rq/worker.py", line 975, in perform_job
    rv = job.perform()
  File "/home/mike/projects/work/blacklight/venv/lib/python3.8/site-packages/rq/job.py", line 696, in perform
    self._result = self._execute()
  File "/home/mike/projects/work/blacklight/venv/lib/python3.8/site-packages/rq/job.py", line 719, in _execute
    return self.func(*self.args, **self.kwargs)
  File "./sba_scraper/scrape.py", line 69, in scrape
    any_minority_owned_checkbox = WebDriverWait(driver, delay).until(
  File "/home/mike/projects/work/blacklight/venv/lib/python3.8/site-packages/selenium/webdriver/support/wait.py", line 80, in until
    raise TimeoutException(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message: 

代码

driver = webdriver.Firefox(firefox_profile=profile, options=options)
url = 'https://web.sba.gov/pro-net/search/dsp_dsbs.cfm'
driver.get(url)
delay = 60
checkbox = WebDriverWait(driver, delay).until(
    EC.presence_of_element_located((By.ID, 'EltCbtMin')))

无论我将延迟设置为 3、10 还是 60,大多数时候我都会遇到上面的异常,它在找到元素之前就超时了。显然它有 40% 的时间有效。谁能告诉我哪里出了问题?

点击 associated with text as Any Minority Owned you can use either of the following :

  • 使用css_selector:

    driver.get('https://web.sba.gov/pro-net/search/dsp_dsbs.cfm')
    driver.find_element(By.CSS_SELECTOR, "input#EltCbtMin[aria-labelledby='LabCbtMin']").click()
    
  • 使用xpath:

    driver.get('https://web.sba.gov/pro-net/search/dsp_dsbs.cfm')
    driver.find_element(By.XPATH, "//input[@id='EltCbtMin' and @aria-labelledby='LabCbtMin']").click()
    

理想情况下,点击你需要诱导的元素WebDriverWait for the and you can use either of the following :

  • 使用CSS_SELECTOR:

    driver.get('https://web.sba.gov/pro-net/search/dsp_dsbs.cfm')
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input#EltCbtMin[aria-labelledby='LabCbtMin']"))).click()
    
  • 使用XPATH:

    driver.get('https://web.sba.gov/pro-net/search/dsp_dsbs.cfm')
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@id='EltCbtMin' and @aria-labelledby='LabCbtMin']"))).click()
    
  • 注意:您必须添加以下导入:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
  • 浏览器快照: