Python Selenium: получение динамического контента в iframe - PullRequest
0 голосов
/ 20 мая 2018

Я пытаюсь собрать доступные списки квартир со следующей веб-страницы: 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 не содержит списков квартир, которые мне нужны.

Если я «проверю» элемент с помощью встроенного в 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. Нажмите кнопку Inspect
  3. Найдите элемент div 'main-content'
  4. Вручную щелкните правой кнопкой мыши на этом элементе div и выберите Копировать -> Копировать элемент

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

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

Ответы [ 2 ]

0 голосов
/ 20 мая 2018

Попробуйте использовать приведенный ниже код для переключения на 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()

0 голосов
/ 20 мая 2018

Вы не можете напрямую видеть содержимое, которое есть в iframe.Вам нужно изменить кадр.Вы можете сделать это, сначала выбрав «элемент iframe», а затем переключившись на него с помощью функции driver.switch_to.frame().

iframe = driver.get_element_by_id('iframe')
driver.switch_to.frame(iframe)

После этого вы сможете получить доступ к содержимому iframe.

Кроме того, вы можетевозьмите атрибут источника iframe и перейдите на эту страницу с селеном.В конце концов, содержимое iframe - это еще одна HTML-страница.

...