Selenium 在 iframe 中引发与下拉列表交互的 NoSuchElementException

Selenium raises NoSuchElementException interacting with dropdown within iframe

我正在努力关注link

我什至无法提取第一个下拉菜单。 我一直在使用 selenium 版本 3.14

我写了下面的代码:

user_agent = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, " \
             "like Gecko) Chrome/100.0.4896.60 Safari/537.36"
options = webdriver.FirefoxOptions()
options.headless = False
options.add_argument(f'user-agent={user_agent}')
options.add_argument("--window-size=1920,1080")
options.add_argument('--ignore-certificate-errors')
options.add_argument('--allow-running-insecure-content')
options.add_argument("--disable-extensions")
options.add_argument("--proxy-server='direct://'")
options.add_argument("--proxy-bypass-list=*")
options.add_argument("--start-maximized")
options.add_argument('--disable-gpu')
options.add_argument('--disable-dev-shm-usage')
options.add_argument('--no-sandbox')
driver = webdriver.Firefox(executable_path=GeckoDriverManager().install(), options=options)
driver.get("https://election.gov.np/np/page/voter-list-db")
driver.implicitly_wait(5)

Select(WebDriverWait(driver, 5).until(EC.presence_of_element_located(
                (By.XPATH, "//select[@id='state']")))).select_by_value("5")
time.sleep(5)

我总是得到:

selenium.common.exceptions.TimeoutException: Message: 

文本为 E-Mail 登录 的元素在 中,因此您必须:

  • 诱导 WebDriverWait 所需的 帧可用并切换到它

  • 诱导 所需的 元素可点击

  • 您可以使用以下任一项:

    • 使用 XPATH:

      driver.get("https://election.gov.np/np/page/voter-list-db")
      WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[@name='bbvrs']")))
      Select(WebDriverWait(driver, 5).until(EC.element_to_be_clickable((By.XPATH, "//select[@id='state']")))).select_by_value("5")
      
  • 注意:您必须添加以下导入:

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


参考

您可以在以下位置找到一些相关讨论:

  • Switch to an iframe through Selenium and python