2012-01-22 11 views
24

Tôi muốn tải xuống trang web được tạo bởi Javascript và lưu nó vào biến chuỗi trong mã Python. Trang được tạo khi bạn nhấp vào nút.Nhận trang được tạo bằng Javascript bằng Python

Nếu tôi biết URL kết quả tôi sẽ sử dụng urllib2 nhưng điều này không đúng.

cảm ơn bạn

+0

Đây có phải là tạo ra hoàn toàn trong js hoặc chỉ xây dựng từ một cuộc gọi ajax? –

+0

@ e-satis Tôi nghĩ rằng nó hoàn toàn trong js – xralf

+0

Sau đó, tôi đã có với giải pháp J.F, hoặc với webkit python. Chỉ cần ghi nhớ rằng họ yêu cầu một máy chủ hiển thị để chạy vì vậy nếu bạn có kế hoạch để làm cho nó chạy trên một máy chủ không đầu, bạn sẽ cần phải hack một chút. –

Trả lời

34

Bạn có thể sử dụng 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

là 'WebDriverWait' với' someId_that_must_be_on_new_page' cần thiết? Nó có thể được thực hiện chỉ với một số chức năng 'sleep' hoặc' delay'? Và có thể đặt chuỗi tác nhân người dùng không? – xralf

+0

Đã xảy ra sự cố. Trên trang web là phần tử 'select' và một cái gì đó phải được chọn. Nếu không có gì được chọn, nút sẽ không hoạt động. Và là cần thiết để mở và đóng firefox? Không có 'guit', nó sẽ không hoạt động? – xralf

+0

bạn có thể sử dụng bất kỳ điều kiện nào bạn thích, ví dụ: 'x.title == 'Tiêu đề mới''. Bạn có thể sửa đổi user-agent bằng cách sử dụng profile firefox thích hợp. – jfs