0
すべてのDOM要素の境界ボックスの座標を取得しようとしています。私は現在、pyqt5を使用していますが、以下のコードで正常にそれを行うことができます:このコードのpyqt5でビューを表示せずにDOM要素の座標を取得する
class Browser(QWebEngineView):
def __init__(self):
super(Browser, self).__init__()
self.loadFinished.connect(self._load_finished)
def _result(self, x):
for tagname, top, right, bottom, left in x:
print "%8s %3d %3d %3d %3d"%(tagname, top, right, bottom, left)
def _load_finished(self):
js_script = """
function get_coordinates() {
var res = [];
var all = document.getElementsByTagName("*");
for (var i=0, max=all.length; i < max; i++) {
var rect = all[i].getBoundingClientRect()
res.push([all[i].tagName, rect.top, rect.right, rect.bottom, rect.left]);
}
return res;
}
get_coordinates();
"""
self.page().runJavaScript(js_script, self._result)
app = QApplication(sys.argv)
br = Browser()
url = QUrl(url_address)
br.load(url)
br.show()
app.exec_()
一つの欠点は、それが(理由br.show()の)Webページを表示するには、ブラウザを開くことで、私はこれを防ぐ方法があれば疑問に思う。私は単にbr.show()にコメントし、コードを実行しました。しかし、いくつかのDOM要素の座標結果は元のものとは異なります。
おかげで、
感謝。変更されたコードは1つのことを除いて正常に動作します。いくつかのDOM要素について、私は異なる座標を取得します - rect.top、rect.bottom、およびrect.leftは同じですが、rect.rightだけが異なります。私は理由を理解しようとしていますが、これまで運がありませんでした。 – DSKim
あなたはどんな尺度を使って比較していますか? – eyllanesc
私はちょうどgetBoundingClientRectを使用して座標を取得するjavascriptの戻り値を比較しました。私はコードを非常に単純なhtmlでテストしました。
テスト