2011-11-02 27 views
5

Tôi đang phát triển một ứng dụng java. Tôi có kịch bản để chụp ảnh màn hình của URL đến máy chủ.Thư viện Java (hoặc bất kỳ lang nào) để hiển thị các trang web ngoại tuyến?

Có thư viện trình duyệt java (hoặc bất kỳ lang nào) để tải các trang web và tải một số ảnh chụp màn hình của trang đã tải hay không. Nó sẽ là tốt đẹp nếu lib cho phép traversal DOM.


Cập nhật:

java(or any lang): Bất kỳ ngôn ngữ khác không phải là một vấn đề nhưng thư viện nên hợp tác với java.

Tôi đã cố gắng setupQt Jambi và dành nhiều thời gian cho việc này nhưng kết quả là không có gì. Nếu bạn cung cấp bất kỳ vật liệu cụ thể nào để thiết lập Jambi, nó sẽ được đánh giá cao.

Tôi cũng đã thử dùng spynner.py. Ngôn ngữ mẹ đẻ của tôi là Java và tôi nghĩ rằng tôi có thể sử dụng spynner.py với Jython. Nhưng, không thể sử dụng PyQt với Jython. Vì vậy, tôi không mong đợi bất kỳ câu trả lời nào liên quan đến Python.


Về cơ bản, tôi cần một thư viện để làm:

  • Tham Screen shot.

  • Một số truyền tải DOM.

  • Một số thực thi Javascript.

  • và để nhận kết quả của mã JS đã thực thi.

Cảm ơn.


Tôi đánh giá cao tất cả các câu trả lời. Tôi đã kết thúc với phantomjs. Nó phù hợp với nhu cầu của tôi. Một công cụ dòng lệnh của nó.

+0

có lẽ bài viết này có thể giúp bạn http://stackoverflow.com/questions/60455/take-a-screenshot-of-a-webpage-with-javascript – andrew

+0

Tôi nghĩ rằng đây là những gì bạn đang tìm kiếm : http://stackoverflow.com/questions/943927/embed-a-web-browser-within-a-java-application –

+0

Vấn đề với câu trả lời của tôi là gì? –

Trả lời

3

Trong java, bạn nên đọc bài viết stackoverflow sau:

Programmatic web browser Java library

Take a screenshot of a webpage with JavaScript?

Embed a web browser within a java application


Bởi vì bạn nói "hay bất cứ lang":

Trong Python, bạn có Spynner:

Spynner là một mô-đun trình duyệt web có lập trình trạng thái cho Python hỗ trợ Javascript/AJAX dựa trên khung QtWebKit.

Theo tài liệu, đây là một đoạn nhỏ:

import spynner 

browser = spynner.Browser() 
browser.load("http://www.wordreference.com") 
browser.runjs("console.log('I can run Javascript!')") 
browser.runjs("_jQuery('div').css('border', 'solid red')") # and jQuery! 
browser.select("#esen") 
browser.fill("input[name=enit]", "hola") 
browser.click("input[name=b]") 
browser.wait_page_load() 
print browser.url, len(browser.html) 
browser.close() 
7

Selenium/Webdriver cung cấp tất cả các chức năng này.

Trình quản trị web cung cấp api đơn giản cho phép bạn "điều khiển" phiên bản trình duyệt. Nhiều trình duyệt được hỗ trợ.

Xem ở đây cho một ví dụ đơn giản:

http://seleniumhq.org/docs/03_webdriver.html#getting-started-with-selenium-webdriver

Traversal của dom bằng cách sử dụng "Bằng cách" định vị:

Tốt ví dụ ở đây: http://www.qaautomation.net/?p=388

driver.findElement(By.name("q")); 

Thi hành Javascript:

?

WebDriver driver; // Assigned elsewhere 
JavascriptExecutor js = (JavascriptExecutor) driver; 
js.executeScript("return document.title"); 

Ảnh chụp màn hình chụp:

http://seleniumhq.org/docs/04_webdriver_advanced.html#taking-a-screenshot

File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); 
1

Nếu bạn cần một ảnh chụp màn hình, tôi đoán chất lượng render là quan trọng đối với bạn. Chúng tôi đã có một kịch bản tương tự. Những gì chúng tôi đã kết thúc làm là chạy firefox trên chế độ không đầu, thực sự duyệt trang web và nhận được một ảnh chụp màn hình trong bộ nhớ. Nó không phải là tầm thường, nhưng tôi có thể cung cấp cho bạn thêm chi tiết nếu bạn muốn đi cho nó.

+0

Với các trang cao hoặc rộng thường yêu cầu cuộn, ảnh chụp màn hình sẽ chỉ nhận được khu vực sẽ hiển thị trong cửa sổ trình duyệt. – momomo

2

Trang web này hiện screenshot công việc:

Hướng dẫn: http://www.paulhammond.org/webkit2png/

Chương trình: http://www.paulhammond.org/2009/03/webkit2png-0.5/webkit2png-0.5.txt

thể nó được bất kỳ dễ dàng hơn? :)

Có một số công cụ khác được đề cập tại trang đó:

" Nếu bạn sử dụng mac, nhưng không thích những dòng lệnh sau đó bạn có thể muốn thử Paparazzi hoặc Little Snapper Nếu bạn. sử dụng linux bạn có thể quan tâm nhiều hơn trong khtml2png, Mozilla screenshot kịch bản Matt Biddulph hay kịch bản QT Webkit Roland Tapken của. "

bạn có thể sử dụng Rhino, Gecko cho javascript thực hiện.

Đối với dom traversal có nhiều tùy chọn, nhưng nếu bạn đang sử dụng Rhino, bạn có thể sử dụng jQuery để làm cho nó dễ dàng hơn!

Hy vọng điều đó phù hợp với bạn!

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