Selenium + Python:使用 driver.switch_to.frame(iframe_id) 后我无法访问 iframe 中的元素

问题描述 投票:0回答:1

[![在此处输入图片描述][1]][1]

我正在使用 python 3 和 selenium 来进行一些网络抓取。 我通常没有任何问题,但这次,我必须访问 iframe 中的元素。

我一直在阅读并决定遵循建议并切换框架,然后寻找元素。

所以我在这里切换框架:

iframe = driver.find_element(By.XPATH, "//iframe[contains(@id, 'ext-gen')]")
iframe_id = str(iframe.get_attribute('id'))

driver.switch_to.frame(iframe_id)

但是,我无法获取此框架中的元素。

[![[在此处输入图片描述](https://i.stack.imgur.com/ElaMS.png)][2]][2]

input_project = driver.find_element(By.XPATH, '//*[contains(@id, "b_s4_l1s4_ctl00_project_i")]')

错误堆栈跟踪:

Traceback (most recent call last):

 input_project = driver.find_element(By.XPATH, '//*[contains(@id, "b_s4_l1s4_ctl00_project_i")]')

  File ~\AppData\Local\anaconda3\lib\site-packages\selenium\webdriver\remote\webdriver.py:831 in find_element
    return self.execute(Command.FIND_ELEMENT, {"using": by, "value": value})["value"]

  File ~\AppData\Local\anaconda3\lib\site-packages\selenium\webdriver\remote\webdriver.py:440 in execute
    self.error_handler.check_response(response)

  File ~\AppData\Local\anaconda3\lib\site-packages\selenium\webdriver\remote\errorhandler.py:245 in check_response
    raise exception_class(message, screen, stacktrace)

NoSuchElementException: Unable to locate element: //*[contains(@id, "b_s4_l1s4_ctl00_project_i")]

  [1]: https://i.stack.imgur.com/bfz8s.png
  [2]: https://i.stack.imgur.com/FnGPC.png
python selenium-webdriver iframe hidden
1个回答
1
投票

我不确定你为什么要这样做

iframe = driver.find_element(By.XPATH, "//iframe[contains(@id, 'ext-gen')]")
iframe_id = str(iframe.get_attribute('id')) <<< why?

driver.switch_to.frame(iframe_id)

您已经在

iframe
中拥有IFRAME元素,只需在切换框架时使用它即可。另外,添加等待以确保框架准备就绪。

iframe = driver.find_element(By.XPATH, "//iframe[contains(@id, 'ext-gen')]")
wait = WebDriverWait(driver, 10)
wait.until(EC.frame_to_be_available_and_switch_to_it(iframe))
© www.soinside.com 2019 - 2024. All rights reserved.