2016-04-21 3 views
2

Я пытаюсь списать динамический контент с Blog через Selenium, но он всегда возвращает un rendered JavaScript.Скрещивание динамического содержимого через селен?

Чтобы проверить это поведение, я попытался дождаться, пока загрузится iframe полностью и напечатайте его содержимое, которое печатает отлично, но снова, когда я вернусь к родительскому фрейму, он просто отображает un rendered JavaScript.

Я ищу что-то, в котором я нахожусь в состоянии напечатать полностью Выводимое содержимое HTML

from selenium import webdriver 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.common.by import By 
from selenium.webdriver.support import expected_conditions 

driver = webdriver.Chrome("path to chrome driver") 
driver.get('http://justgivemechocolateandnobodygetshurt.blogspot.com/') 

WebDriverWait(driver, 40).until(expected_conditions.frame_to_be_available_and_switch_to_it((By.ID, "navbar-iframe"))) 

# Rendered iframe HTML is printed. 
content = driver.page_source 
print content.encode("utf-8") 

# When I switch back to parent frame it again prints non rendered JavaScript. 
driver.switch_to.parent_frame() 
content = driver.page_source 
print content.encode("utf-8") 
+0

потому что '.page_source' возвращает исходный код, а не DOM – Fabricator

+0

@Fabricator Как я могу получить обновленный DOM? –

+0

@UmarIqbal, вы пробовали выбрать элемент, используя один из методов 'find_element'? – DuckPuncher

ответ

3

Проблема заключается в том - the .page_source works only in the current context. Существует то, что "current top-level browsing context" notation..Meaning, если вы назовете его по умолчанию - вы не получите внутренний HTML-код дочернего элемента iframe - для этого вам нужно будет перейти в контекст frame и вызвать .page_source.

Другими словами, чтобы получить полный HTML-код страницы, включая источник страницы iframe, вам придется переключаться в контексты iframe один за другим и получать источники по отдельности.

Смотрите также:


Старый ответ:

Я бы wait, по крайней мере, один вход в блог, чтобы быть нагрузки ред до получения page_source:

from selenium.webdriver.common.by import By 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 

wait = WebDriverWait(driver, 40) 
wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, ".entry-content"))) 

print(driver.page_source) 
+0

Не имеет значения, все еще возвращает старый DOM. –

+0

@ UmarIqbal хорошо, что вы подразумеваете под старым DOM? И каков ваш желаемый результат? – alecxe

+0

старым DOM Я имел в виду un rendered JavaScript. Все, что я хочу, это полностью визуализированный HTML-контент. –

Смежные вопросы