我正在尝试在网页中获取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标签的尺寸?
答案 0 :(得分:4)
只需运行浏览器就不允许您从中读取任何数据,因此请忘记使用system
。
您可以使用Selenium Webdriver通过PHP控制浏览器,运行JavaScript,然后返回结果。
当您编写真正的JavaScript时,您需要修复问题中包含的示例中出现的语法错误。
请记住,屏幕上元素的大小取决于安装字体,所选字体大小,浏览器,窗口大小等因素。您可以获得系统上运行的浏览器的结果,但您可以'取决于它是一个普遍的结果。
答案 1 :(得分:0)
“有另一个解决方案来获取HTML标记的维度吗?”
Firebug / Inspect出了问题,它会通过一些简单的操作为你提供渲染的偏移量。
如果你想以编程方式运行代码,请在控制台中运行代码,尽管你仍然需要使用firebug / Inspect来找到正确的选择器(这实际上无法自动执行任何操作)。试着记录下来......好吧,听起来你正试图保留一个数据库 ...也许你应该设置一个。
这可能是您需要添加更多上下文以获得有用响应的问题。