2014-04-17 19 views
8

Tôi đang tìm kiếm khả năng hiển thị pdf với PhantomJS qua GhostDriver, không chỉ hiển thị pdf. Khi tôi sử dụng mã tiếp theo, sau đó trang thường nạp:Cách chạy mã trang web bằng PhantomJS qua GhostDriver (selenium)

from selenium import webdriver 

driver = webdriver.PhantomJS('./node_modules/phantomjs/bin/phantomjs') 
driver.set_window_size(1024, 768) 
driver.get('http://stackoverflow.com') 

Khi tôi sử dụng kịch bản tiếp theo thông qua dòng lệnh https://github.com/ariya/phantomjs/blob/master/examples/rasterize.js sau đó pdf được tạo ra một cách hoàn hảo.

Bây giờ tôi muốn tập lệnh thực thi như rasterize.js (page.render('file.pdf')) nhưng thông qua webdriver. webdriver có phương thức execute_script nhưng có vẻ như PhantomJS đánh giá mã và không có quyền truy cập vào ngữ cảnh cá thể webpage. Ngoài ra webdriver có phương thức get_screenshot_as_base64, nhưng chỉ trả lại png.

Tôi sử dụng phiên bản mới nhất của selenium, phantomjs, nodejs.

Vì vậy, câu hỏi của tôi làm cách nào tôi có thể truy cập vào PhantomJS phiên bản trang web qua GhostDriver và đánh giá phương pháp render?

+0

Tôi đang tìm kiếm điều này, cũng ... bất kỳ ai? – j040p3d20

+0

Chỉ với thế hệ PDF (không phải 'GhostDriver' hoặc' WebDriver'), bạn có thể sử dụng 'ghost.py' (cần QT), tìm thấy các trình bao bọc với' pyexecjs' hoặc 'các tiến trình con'. Cũng tồn tại các gói python dưới dạng 'pdfkit' và' wkhtmltopdf' làm trình bao bọc cho 'wkhtmltopdf' - nó phải có cùng kết quả vì cũng là webkit. 'weasyprint' cũng tốt nhưng không phải webkit. – tbicr

Trả lời

9

Có một cách đặc biệt để thực hiện PhantomJS kịch bản từ GhostDriver, sử dụng lệnh sau:

POST /session/id/phantom/execute 

Nó đã được đưa vào GhostDriver v1.1.0, vì vậy nó nên làm việc kể từ PhantomJS v.1.9.6.

Nhìn vào ví dụ này:

def execute(script, args): 
    driver.execute('executePhantomScript', {'script': script, 'args' : args }) 

driver = webdriver.PhantomJS('phantomjs') 

# hack while the python interface lags 
driver.command_executor._commands['executePhantomScript'] = ('POST', '/session/$sessionId/phantom/execute') 

driver.get('http://stackoverflow.com') 

# set page format 
# inside the execution script, webpage is "this" 
pageFormat = '''this.paperSize = {format: "A4", orientation: "portrait" };''' 
execute(pageFormat, []) 

# render current page 
render = '''this.render("test.pdf")''' 
execute(render, []) 

Lưu ý rằng trong OS X PhantomJS renders web page as images với văn bản không thể lựa chọn, do những hạn chế của rendering engine Qt trong OS X (ít nhất là với PhantomJS v.1.9.8 và trước đó).

+0

Và cho việc triển khai không phải python? Có cách nào để làm điều này trong Java hoặc thực hiện bất kỳ khác ngoài python? – Tibbers

Các vấn đề liên quan