Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用WebKit(或Gecko)查找呈现的HTML元素位置_Python_Html_Perl_Rendering_Rendering Engine - Fatal编程技术网

Python 使用WebKit(或Gecko)查找呈现的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根本帮不了你。它根本不关心前端渲染 要准确

我想在浏览器呈现网页的所有HTML元素时获取它们的尺寸(坐标),也就是它们呈现的位置。例如,
(左上、右上、左下、右下)

在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(几天前发布的)…但是,它看起来确实很有希望。查看此页面的建议: