2

Web ページのすべての HTML 要素がブラウザーによってレンダリングされるときの寸法 (座標)、つまりレンダリングされる位置を取得したいと考えています。例えば、(top-left,top-right,bottom-left,bottom-right)

これは lxml で見つかりませんでした。それで、これを行うPythonのライブラリはありますか?Mechanize::Mozilla in Perl も調べましたが、構成/セットアップが難しいようです。

私の要件に対してこれを行う最善の方法は、WebKit や Gecko などのレンダリング エンジンを使用することだと思います。

上記の 2 つのレンダリング エンジンで使用できる perl/python バインディングはありますか? WebKit レンダリング エンジンに「プラグイン」する方法に関するチュートリアルを Google で検索しても、あまり役に立ちません。

4

7 に答える 7

3

lxml はまったく役に立ちません。フロントエンドのレンダリングについてはまったく気にしません。

何かがどのようにレンダリングされるかを正確に理解するには、それをレンダリングする必要があります。そのためには、ブラウザーにフックし、ページを生成し、ページ上で JS を実行して DOM 要素を見つけ、その属性を取得する必要があります。

それは完全に可能ですが、Web サイトのスクリーンショット ファクトリがどのように機能するかを確認することから始めるべきだと思います (ブラウザを起動して正しいページを表示するために必要なコードの 90% を共有するため)。

lxml を使用して、javascript をページに挿入することもできます。

于 2009-06-11T09:08:12.487 に答える
1

次の 3 つの主なオプションがあります。

1) http://www.gnu.org/software/pythonwebkitは webkit ベースです。

2) MSHTML にアクセスするための python-comtypes (Windows のみ)

3) xulrunner ベースの hulahop (python-xpcom)

pyjamas-desktop ソース コードを取得し、pyjd/ ディレクトリで「スタートアップ」コードを探す必要があります。これにより、Web ブラウザ アプリケーションを作成し、「ページの読み込み」コールバックがエンジンによって呼び出された後、操作を開始できます。 DOM。

ノード ウォーキングを実行し、必要な DOM 要素のプロパティにアクセスできます。pyjamas/library/pyjamas/DOM.py モジュールを見ると、やりたいことを行うために使用する必要がある多くのものを確認できます。

しかし、上記の 3 つのオプションでは不十分な場合は、http://wiki.python.org/moin/WebBrowserProgrammingのページを読んで、他の人がここで言及したその他のオプションを確認してください。

l.

于 2010-10-09T19:02:50.697 に答える
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 }
});

関連ドキュメントはこちらです。

于 2009-06-11T11:37:58.053 に答える
1

はい、Javascript を使用します。

var allElements=document.getElementsByTagName("*"); ページ内のすべての要素を選択します。

次に、これをループして、各要素から必要な情報を抽出できます。要素の寸法と位置の取得に関する優れたドキュメントはこちらです。

getElementsByTagName は配列ではなくノードリストを返します (したがって、JS が HTML を変更すると、それらの変更はノードリストに反映されます)。そのため、データを AJAX ポストに組み込み、それが完了したらサーバーに送信したくなるでしょう。

于 2009-06-11T11:51:05.400 に答える
1

上記のレンダリングの問題を解決するために Webkit/Gecko にフックする簡単な解決策 (つまり、Java/Perl/Python :) を見つけることができませんでした。私が見つけた最高のものは、DOM と HTML 要素のレンダリング属性の両方にアクセスするという、まさに私が望むことを行う非常に明確な API を備えた Java で書かれたLobo レンダリング エンジンでした。

JRexは、Gecko レンダリング エンジンの Java ラッパーです。

于 2009-06-24T13:38:28.667 に答える
0

WWW::Seleniumを見ることを検討してください。これ (およびselenium rc ) を使用すると、Perl 内から文字列 IE、Firefox、または Safari を操ることができます。

于 2009-06-22T19:56:38.570 に答える
0

問題は、現在のブラウザーがまったく同じようにレンダリングしないことです。標準に準拠した方法を探している場合は、ページをレンダリングするために Python で何かを書くことができますが、それは非常に多くの作業になるでしょう。

wxWidgets の wxHTML コントロールを使用して、ページの各部分を個別にレンダリングし、そのサイズを把握できます。

Mac をお持ちの場合は、WebKitを試すことができます。同じ記事には、他のプラットフォームでの解決策についてもいくつかの提案があります。

于 2009-06-11T09:25:48.597 に答える