使用PHP获取HTML / DOM元素的像素坐标

时间:2014-02-28 10:41:56

标签: php html dom coordinates headless-browser

我正在使用php中的网络爬虫/网站分析器。我需要做的是从HTML文件中提取一些标签并计算一些属性(例如图像大小)。我可以使用DOM解析器轻松完成此操作,但我还需要找到html / DOM树元素的像素坐标和大小(假设我有一个div,我需要知道它覆盖哪个区域以及在哪个坐标上它开始和如果)。我可以定义一个标准的屏幕分辨率,这对我来说不是问题,但我需要自动检索像素坐标,使用服务器端的PHP脚本(或者从控制台调用一些java应用程序或类似的东西,如果需要的话)。

根据我的理解,我需要一个php的无头浏览器,它可以模拟/渲染一个网页,我可以从中检索出我需要的像素坐标。你会推荐我一个开源解决方案吗?一些代码片段也很有用,所以我不会安装解决方案,然后注意它不提供像素坐标。

PS:我看到回答的人错过了问题的重点,所以这意味着我没有解释好我需要这个解决方案完全在服务器端工作。假设我使用爬虫,它将html页面提供给我的脚本。我可以从浏览器启动它,也可以从控制台启动它(比如'php myScript.php')。

2 个答案:

答案 0 :(得分:1)

也许你可以使用javascript

将坐标设置为标签内的某种元数据
$("element").data("coordinates",""+this.offset.top+","+this.offset.left);

然后你必须用php

请求
$html = file_get_contents($url);

$doc = new DOMDocument();
@$doc->loadHTML($html);

$tags = $doc->getElementsByTagName('element');

foreach ($tags as $tag) {
   echo $tag->getAttribute('data'); <-- this will print the coordinates of each tag
}

答案 1 :(得分:0)

无头浏览器对于您正在尝试实现的目标而言过于苛刻。只需使用cookie存储您想要的任何内容。

因此,只要您在javascript中获得某些信息(例如X,Y坐标,滚动位置等),只需将其发送到PHP脚本,该脚本使用一些唯一的字符串索引从中创建cookie。 / p>

最终,您将拥有大量可直接用于任何PHP或javascript文件的Cookie数据,并且您可以在此处执行任何您喜欢的操作。

例如,如果您只想在会话中存储内容,则可以执行以下操作:

<强> jquery的

// save whatever you want from javascript
// note: probably better to POST, since we're not getting anything really, just showing quick example
$.get('save-attr.php?attr=xy_coord&value=300,550');

<强> PHP

// this will be the save-attr.php file
session_start();
$_SESSION[$_GET['attr']] = $_GET['value'];

// now any other script can get this value like so:
$coordinates = $_SESSION['xy_coord'];
// where $coordinates would now equal "300,550" 

对于PHP中需要访问的任何内容,简单地继续使用此模式