2012-01-22 18 views
24

Me gustaría descargar la página web generada por Javascript y almacenarla en la variable de cadena en el código Python. La página se genera cuando haces clic en el botón.Obtener página generada con Javascript en Python

Si yo supiera la URL resultante Me gustaría utilizar urllib2 pero este no es el caso.

agradecimiento

+0

¿Es éste genera completamente en js o simplemente construido a partir de una llamada AJAX? –

+0

@ e-satis creo que es completamente en js – xralf

+0

entonces me dieron con una solución J.F, o con webkit pitón. Solo tenga en cuenta que requieren que se ejecute un servidor de pantalla, por lo que si planea ejecutarlo en un servidor sin cabeza, deberá piratear un poco. –

Respuesta

34

Usted podría utilizar Selenium Webdriver:

#!/usr/bin/env python 
from contextlib import closing 
from selenium.webdriver import Firefox # pip install selenium 
from selenium.webdriver.support.ui import WebDriverWait 

# use firefox to get page with javascript generated content 
with closing(Firefox()) as browser: 
    browser.get(url) 
    button = browser.find_element_by_name('button') 
    button.click() 
    # wait for the page to load 
    WebDriverWait(browser, timeout=10).until(
     lambda x: x.find_element_by_id('someId_that_must_be_on_new_page')) 
    # store it to string variable 
    page_source = browser.page_source 
print(page_source) 
+3

es el '' WebDriverWait' con neccessary someId_that_must_be_on_new_page'? ¿Podría hacerse solo con alguna función 'sleep' o' delay'? ¿Y es posible establecer la cadena de agente de usuario? – xralf

+0

Todavía hay un problema. En la página web está el elemento 'select' y hay que seleccionar algo. Si no se selecciona nada, el botón no funcionará. ¿Y es necesario abrir y cerrar Firefox? Sin 'guit' esto no funcionará? – xralf

+0

puede usar cualquier condición que desee, por ejemplo, 'x.title == 'New Title''. Probablemente pueda modificar user-agent utilizando el perfil apropiado de Firefox. – jfs

Cuestiones relacionadas