2009-06-11 85 views
2

我想獲取瀏覽器呈現的所有網頁HTML元素的尺寸(座標),即它們呈現的位置。例如,(top-left,top-right,bottom-left,bottom-right)使用WebKit(或Gecko)查找呈現的HTML元素位置

在lxml中找不到這個。那麼,Python中是否有這樣的庫?我也曾在Perl中看過Mechanize :: Mozilla,但這似乎很難配置/設置。

我認爲爲我的要求做到這一點的最好方法是使用渲染引擎 - 像WebKit或Gecko。

上述兩個渲染引擎是否有任何perl/python綁定可用?谷歌搜索關於如何「插件」到WebKit渲染引擎的教程不是很有幫助。

+0

究其原因,我期待直接插件瀏覽器的渲染引擎,是因爲,我有一百萬ATLEAST要測試的網址和,我不使用硒等將是非常高效與思考那。 :) – 2009-06-22 20:02:06

回答

1

我無法找到任何簡單的解決方案(即Java的/的Perl/Python的:)來鉤住的Webkit/Gecko的解決上述問題的渲染。我能找到的最好的是用Java編寫的Lobo rendering engine,它有一個非常明確的API,它完全符合我的要求 - 訪問DOM和HTML元素的呈現屬性。

JRex是一個Java包裝到Gecko渲染引擎。

3

lxml根本不會幫你。它根本不關心前端渲染。

要準確計算渲染的方式,您需要渲染它。爲此,您需要掛鉤到瀏覽器中,生成頁面並在頁面上運行一些JS以查找DOM元素並獲取其屬性。

這是完全可能的,但我認爲你應該首先看看網站截圖工廠是如何工作的(因爲他們將共享你需要的代碼的90%,以啓動瀏覽器並顯示正確的頁面)。

您可能還想使用lxml將JavaScript注入頁面。

+0

謝謝!我看着Webkit(Pywebkitgtk)進行渲染。但是,它目前不支持獲取DOM - http://code.google.com/p/pywebkitgtk/issues/detail?id=13 – 2009-06-17 06:01:26

+0

在將HTML傳遞給瀏覽器之前操作HTML。在AJAX中添加一個JavaScript塊,將正確的數據添加回給您。 – Oli 2009-06-17 07:01:20

+0

其實,我試圖找到使用渲染引擎(無論是Gecko,Webkit)的例子。但是,一個教程幾乎不可能找到。 – 2009-06-18 07:30:40

0

問題是,目前的瀏覽器不會渲染的東西完全相同。如果你正在尋找符合標準的做事方式,你可能會用Python編寫一些東西來渲染頁面,但這將是一個非常麻煩的工作。

您可以使用wxHTML control from wxWidgets來單獨呈現頁面的每個部分,以瞭解它的大小。

如果你有一臺蘋果機,你可以試試WebKit。同樣的文章也對其他平臺上的解決方案提出了一些建議。

1

我同意Oli,渲染有問題的頁面和通過JavaScript檢查DOM是最實用的方法恕我直言。

你可能會發現這裏jQuery非常有用:

$(document).ready(function() { 
    var elem = $("div#some_container_id h1") 
    var elem_offset = elem.offset(); 
    /* elem_offset is an object literal: 
     elem_offset = { x: 25, y: 140 } 
    */ 
    var elem_height = elem.height(); 
    var elem_width = elem.width(); 
    /* bottom_right is then 
     { x: elem_offset.x + elem_width, 
     y: elem_offset.y + elem_height } 
}); 

相關文檔here

1

是,JavaScript是要走的路:

VAR allElements = document.getElementsByTagName( 「*」);將選擇頁面中的所有元素。

然後你可以通過這個循環來提取你需要的每個元素的信息。有關獲取元素的尺寸和位置is here.

的getElementsByTagName良好的文檔返回一個節點列表不是一個數組(所以如果你的JS改變你的HTML這些更改將在節點列表中反映出來),所以我會忍不住建數據放入AJAX文章並在完成後將其發送到服務器。

0

你可能會考慮看看WWW::Selenium。有了它(和selenium rc),您可以從Perl內部傀儡字符串IE,Firefox或Safari。

+0

原因是,我期望直接插入到瀏覽器的渲染引擎,因爲我必須使用至少一百萬個URL進行測試,並且我不認爲使用Selenium等會非常高效。 :) – 2009-06-22 20:02:39

1

您有三個主要選項:

1)http://www.gnu.org/software/pythonwebkit是基於WebKit的;

2)中的python-comtypes訪問MSHTML(僅限於Windows)

3)hulahop(蟒蛇-XPCOM),這是XULRunner的基礎

你應該得到的睡衣桌面的源代碼,並期待在pyjd /「啓動」代碼的目錄,它允許你創建一個Web瀏覽器應用程序,並在引擎調用「頁面加載」回調後,開始操作DOM。

您可以執行節點行走,並且可以訪問您需要的DOM元素的屬性。你可以看看睡衣/圖書館/睡衣/ DOM.py模塊,看看你需要使用的許多東西,以便做你想做的事情。

但如果上述三個選項是不夠的,你應該閱讀http://wiki.python.org/moin/WebBrowserProgramming的頁面進行進一步的選擇,其中許多已被其他人略。

l。