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):




  1. вручную щелкните правой кнопкой мыши на элементе списка внутри веб-страницы

  2. Нажмите Проверить

  3. найти div 'main-content'

  4. вручную щелкните правой кнопкой мыши на этом div и выберите Копировать - > копировать элемент


Это не является эффективным решением, так как я стремлюсь автоматизировать этот процесс.

Как я могу получить это динамически генерируемый контент из веб-страницы программным способом?

1347   2  

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

    Ничего не найдено.