Python Selenium: получение динамического содержимого в iframe
Я пытаюсь соскрести доступные списки квартир со следующей веб-страницы: https://3160599v2.onlineleasing.realpage.com/
Я использую реализацию Selenium на Python, но до сих пор не нашел эффективного решения для программного получения контента. Мой самый простой код-это следующий, который в настоящее время просто возвращает нединамический исходный код HTML:
from selenium import webdriver
driver = webdriver.Chrome('/path_to_driver')
driver.get('https://3160599v2.onlineleasing.realpage.com/')
html = driver.page_source
Возвращаемая переменная html не содержит списков квартир I необходимость.
Если я "проверяю" элемент с помощью встроенного в Chrome инструмента проверки, я вижу, что содержимое находится в неклассированном iframe: <iframe frameborder="0" realpage-oll-widget="RealPage-OLL-Widget" style="width: 940px; border: none; overflow: hidden; height: 2251px;"></iframe>
Несколько детей внутри этого iframe вы также можете увидеть div <div class="main-content">, который содержит всю необходимую мне информацию.
Другие решения, которые я пробовал, включают реализацию явного WebDriverWait:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.CLASS_NAME, 'main-content')))
Я получаю TimeoutException с этим методом, поскольку элемент никогда не найден.
Я также попытался использовать метод driver.switch_to.frame(), с никакой успех.
Единственными шагами, которые действительно позволили мне получить списки квартир с веб-страницы, были (с помощью Chrome):
- вручную щелкните правой кнопкой мыши на элементе списка внутри веб-страницы
- Нажмите Проверить
- найти div 'main-content'
- вручную щелкните правой кнопкой мыши на этом div и выберите Копировать - > копировать элемент
Это не является эффективным решением, так как я стремлюсь автоматизировать этот процесс.
Как я могу получить это динамически генерируемый контент из веб-страницы программным способом?
2 ответов:
Попробуйте использовать приведенный ниже код для переключения на iframe:
from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.ui import WebDriverWait as wait wait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it(driver.find_element_by_xpath('//iframe[@realpage-oll-widget="RealPage-OLL-Widget"]')))Также отметим, что метод, позволяющий перейти к статическому
iframe, являетсяswitch_to.frame(), но неswitch-to.frame()
Вы не можете непосредственно видеть содержимое, которое находится в iframe. Вам нужно сменить кадр. Это можно сделать, выбрав сначала элемент iframe, а затем переключившись на него с помощью функции
driver.switch_to.frame().iframe = driver.get_element_by_id('iframe') driver.switch_to.frame(iframe)После этого вы можете получить доступ к содержимому iframe.
В качестве альтернативы, вы можете взять исходный атрибут iframe, а затем перейти на эту страницу с selenium. В конце концов, содержимое iframe - это еще одна html-страница.
Comments