2012-01-22 13 views
24

Chciałbym pobrać stronę wygenerowaną przez Javascript i zapisać ją do zmiennej łańcuchowej w kodzie Python. Strona jest generowana po kliknięciu przycisku.Pobierz stronę wygenerowaną za pomocą Javascript w języku Python

Gdybym znał wynikowy URL, użyłbym urllib2, ale tak nie jest.

dziękuję

+0

Jest to całkowicie wygenerowane w js lub po prostu zbudowany z wywołania AJAX? –

+0

@ e-satis Myślę, że jest to całkowicie w js – xralf

+0

Następnie miałem z J.F rozwiązanie lub z pythoniem webkit. Pamiętaj, że wymagają one, aby serwer wyświetlania działał, więc jeśli planujesz uruchomić go na bezgłowym serwerze, musisz trochę zhackować. –

Odpowiedz

34

można użyć 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

jest "WebDriverWait' z' someId_that_must_be_on_new_page' neccessary? Czy można to zrobić tylko przy pomocy funkcji "uśpienia" lub "opóźnienia"? I czy można ustawić ciąg znaków użytkownika? – xralf

+0

Jest jeszcze jeden problem. Na stronie internetowej znajduje się element 'select' i trzeba coś wybrać. Jeśli nic nie zostanie wybrane, przycisk nie będzie działał. Czy otwieranie i zamykanie Firefoksa jest konieczne? Bez 'guit' to nie zadziała? – xralf

+0

możesz użyć dowolnego warunku, który ci się podoba, np. 'X.title == 'Nowy tytuł''. Prawdopodobnie możesz zmodyfikować program użytkownika za pomocą odpowiedniego profilu firefox. – jfs

Powiązane problemy