Python 使用WebKit(或Gecko)查找呈现的HTML元素位置
我想在浏览器呈现网页的所有HTML元素时获取它们的尺寸(坐标),也就是它们呈现的位置。例如,Python 使用WebKit(或Gecko)查找呈现的HTML元素位置,python,html,perl,rendering,rendering-engine,Python,Html,Perl,Rendering,Rendering Engine,我想在浏览器呈现网页的所有HTML元素时获取它们的尺寸(坐标),也就是它们呈现的位置。例如,(左上、右上、左下、右下) 在lxml中找不到此项。那么,Python中是否有这样的库?我还研究了Perl中的Mechanize::Mozilla,但这似乎很难配置/设置 我认为最好的方法是使用渲染引擎,比如WebKit或Gecko 上述两个渲染引擎是否有可用的perl/python绑定?谷歌搜索关于如何“插件”到WebKit渲染引擎的教程并没有太大帮助 lxml根本帮不了你。它根本不关心前端渲染 要准确
(左上、右上、左下、右下)
在lxml中找不到此项。那么,Python中是否有这样的库?我还研究了Perl中的Mechanize::Mozilla,但这似乎很难配置/设置
我认为最好的方法是使用渲染引擎,比如WebKit或Gecko
上述两个渲染引擎是否有可用的perl/python绑定?谷歌搜索关于如何“插件”到WebKit渲染引擎的教程并没有太大帮助 lxml根本帮不了你。它根本不关心前端渲染 要准确计算出某个对象的渲染方式,需要对其进行渲染。为此,您需要连接到浏览器,生成页面并在页面上运行一些JS来查找DOM元素并获取其属性 这是完全可能的,但我认为你应该先看看网站截图工厂是如何工作的(因为他们会分享90%的代码,你需要启动浏览器并显示正确的页面)
您可能仍然希望使用lxml将javascript注入页面。问题在于当前浏览器呈现的内容并不完全相同。如果您正在寻找符合标准的方法,您可能会用Python编写一些东西来呈现页面,但这将是一项非常艰巨的工作 您可以使用单独呈现页面的每个部分,以了解页面的大小 如果你有Mac电脑,你可以试试。同一篇文章也对其他平台上的解决方案提出了一些建议。我同意,通过JavaScript呈现相关页面并检查DOM是IMHO最实用的方法 您可能会发现以下内容非常有用:
$(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 }
});
相关文档是。是的,Javascript是一条可行之路: var-allegements=document.getElementsByTagName(“*”);将选择页面中的所有元素 然后,您可以循环执行此操作,从每个元素中提取所需的信息。关于获取元素的尺寸和位置的良好文档
GETelEntsByTyNeNT返回一个NODLIST而不是一个数组(因此,如果您的JS更改了HTML,这些更改将反映在NODLIST中),所以我会尝试将数据构建到AJAX POST中,并在完成后将其发送到服务器。
您可以考虑查看。有了它(和),您可以从Perl内部复制字符串IE、Firefox或Safari。
我找不到任何简单的解决方案(即Java/Perl/Python:)来连接Webkit/Gecko以解决上述渲染问题。我所能找到的最好的是用Java编写的,它有一个非常清晰的API,可以完全满足我的需要——访问DOM和HTML元素的呈现属性是Gecko渲染引擎的Java包装器。您有三个主要选项: 1) 是基于webkit的 2) 用于访问MSHTML的python comtypes(仅限windows) 3) hulahop(PythonXPcom),它是基于xulrunner的 您应该获得pyjamas桌面源代码,并在pyjd/目录中查找“启动”代码,该代码将允许您创建web浏览器应用程序,并在引擎调用“页面加载”回调后开始操作DOM 您可以执行节点遍历,并可以访问所需的DOM元素的属性。您可以查看pyjamas/library/pyjamas/DOM.py模块,以了解您需要使用的许多东西,从而实现您想要的功能 但是,如果以上三个选项还不够,那么您应该阅读本页以了解更多选项,其中许多选项已经在这里被其他人提到
l、 谢谢!我查看了Webkit(Pywebkitgtk)进行渲染。但是,它目前不支持在将HTML传递到浏览器之前获取DOM并对其进行操作。在AJAX中添加一个javascript块,将正确的数据返回给您。但是,几乎找不到教程。我希望直接插入浏览器的渲染引擎的原因是,我必须使用至少一百万个URL进行测试,我不认为使用Selenium等将非常有效。:)我希望直接插入浏览器的渲染引擎的原因是,我必须使用至少一百万个URL进行测试,我不认为使用Selenium等将非常有效。:)是的,它不会:)幸运的是,您可以调整其中一个pyjamas桌面运行时,以简单地创建一个实际上不在屏幕上显示的GUI(也称为“headless”用法)。如果您真的想认真对待资源,那么创建一个无头版本的pythonwebkit(根本不启动GTK)将是一个好方法。我需要大约2周的时间来完成编程:如果你准备与我签约,请与我联系(我很容易找到:谷歌“luke leighton”)。我还没有尝试过pythonwebkit(几天前发布的)…但是,它看起来确实很有希望。查看此页面的建议: