PHP - 获取HTML标记的维度

时间:2012-07-01 10:30:03

标签: php render

我正在尝试在网页中获取HTML标记的一些属性。

<html>
<head>
  <title>test page</title>
</head>
<body>
  <div id="header" class="clearit" role="banner">
    <div id="headerWrapper">
      <ul id="primaryNav" role="navigation">
        <li id="musicNav" class="navItem">
          <a href="/music" class="nav-link">Music</a>
        </li>
        <li id="listenNav" class="navItem">
          <a href="/listen" class="nav-link">Radio</a>
        </li>
        <li id="eventsNav" class="navItem">
          <a href="/events" class="nav-link">Events</a>
        </li>
        <li id="chartsNav" class="navItem">
          <a href="/charts" class="nav-link">Charts</a>
        </li>
        <li id="communityNav" class="navItem">
          <a href="/community" class="nav-link">Community</a>
        </li>
        <li id="originalsNav" class="navItem">
          <a href="http://originals.last.fm" class="nav-link">Originals</a>
        </li>
      </ul>
    </div>
  </div>
</body>
</html>

例如,我需要#headerWrapper的实际高度和宽度,并在我的PHP脚本中将其与#musicNav进行比较。由于PHP是服务器端,我无法获取这些属性,所以我想添加Javascript代码来计算这些属性并将它们存储在JSON文件中,如下代码所示:

<script type="text/javascript">
document.ready(function() {
  var JSONObject= {
    "tagname":"headerWrapper",
    "height":$("#headerWrapper").height(),
    "width":$("#headerWrapper").width()
  },
  {
    "tagname":"musicNav",
    "height":$("#musicNav").height(),
    "width":$("#musicNav").width()
  }
  });
});  
</script>

然后我想在包含我的算法的php文件中读取它以从网页中提取视觉特征。所以我需要使用一些浏览器渲染带有附加Javascript的网页。我正在使用exec将新文件发送到Firefox,如下所示:

exec('"C:\Program Files (x86)\Mozilla Firefox\firefox.exe" "http://localhost/Autoextractor/test.html" 2> errors.txt');

Firefox在taskmanager中打开,但不显示,页面未呈现,并且我的附加Javascript代码未执行。< / p>

safe_mode = off - disabled_functions从php.ini中删除并在执行时     EXEC( “WHOAMI”); 结果是我的用户(注意:管理员组中的用户),我确实尝试了wscript但没有结果。

有没有人知道它为什么不起作用,或者有其他解决方案来获取HTML标签的尺寸?

2 个答案:

答案 0 :(得分:4)

只需运行浏览器就不允许您从中读取任何数据,因此请忘记使用system

您可以使用Selenium Webdriver通过PHP控制浏览器,运行JavaScript,然后返回结果。

当您编写真正的JavaScript时,您需要修复问题中包含的示例中出现的语法错误。

请记住,屏幕上元素的大小取决于安装字体,所选字体大小,浏览器,窗口大小等因素。您可以获得系统上运行的浏览器的结果,但您可以'取决于它是一个普遍的结果。

答案 1 :(得分:0)

“有另一个解决方案来获取HTML标记的维度吗?”

Firebug / Inspect出了问题,它会通过一些简单的操作为你提供渲染的偏移量。

如果你想以编程方式运行代码,请在控制台中运行代码,尽管你仍然需要使用firebug / Inspect来找到正确的选择器(这实际上无法自动执行任何操作)。试着记录下来......好吧,听起来你正试图保留一个数据库 ...也许你应该设置一个。

这可能是您需要添加更多上下文以获得有用响应的问题。