Я использую python 3 и селен, чтобы делать некоторые веб-скрейпинги. Обычно у меня нет проблем, но на этот раз мне нужно получить доступ к элементам в 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)
Однако я не могу получить элементы в этом кадре.
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")]
🤔 А знаете ли вы, что...
Python популярен в анализе данных и машинном обучении с помощью библиотеки scikit-learn.
Я не уверен, почему ты это делаешь
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))