2012-01-22 26 views
24

Javascript tarafından üretilen web sayfasını indirmek ve Python kodunda dize değişkenine kaydetmek istiyorum. Düğmeye tıkladığınızda sayfa oluşturulur.Python'da Javascript ile oluşturulan sayfa alın

Ortaya çıkan URL'yi biliyorsanız urllib2 kullanırdım, ancak durum böyle değil.

Eğer

+0

bu js içinde tamamen oluşturulmuş ya da sadece bir ajax çağrısından inşa mi? –

+0

@ e-satis Ben tamamen js – xralf

+0

olduğunu düşünüyorum Sonra J.F çözümü veya python webkit ile var. Sadece bir ekran sunucusunun çalışması için akılda tutulması gerektiğini unutmayın, böylece başsız bir sunucuda çalıştırmayı planlıyorsanız, biraz hacklemeniz gerekecektir. –

cevap

34

Sen Selenium Webdriver kullanabilirsiniz teşekkür:

#!/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

, "someId_that_must_be_on_new_page" gerektiren WebDriverWait'tir. Sadece bazı "uyku" veya "gecikme" fonksiyonu ile yapılabilir mi? Kullanıcı aracı dizesini ayarlamak mümkün mü? – xralf

+0

Henüz bir sorun var. Web sayfasında 'select' öğesi ve bir şey seçilmelidir. Hiçbir şey seçilmezse düğme çalışmaz. Ve firefox açmak ve kapatmak için gerekli? 'Guit' olmadan bu işe yaramaz mı? – xralf

+0

, örneğin, x.title == 'Yeni Başlık' gibi istediğiniz herhangi bir koşulu kullanabilirsiniz. Muhtemelen uygun firefox profilini kullanarak kullanıcı aracısını değiştirebilirsiniz. – jfs

İlgili konular