假设我有一段javascript代码,它从php传递了一个包含整个html页面的字符串,我把这个字符串写入当前文档,然后修改其中一个包含的元素,类似于:
<script type="text/javascript">
var foo = <?php echo $html_document;?>;
document.open();
document.write(foo);
document.close();
document.getElementById("some_id_within_html_document").innerHTML = "some stuff";
</script>
这将提供所需的输出,一切看起来都很好...除了当你查看这个页面的源代码。如果我想刮这个页面后,做同样的事情,它显示的javascript,而不是由浏览器解释的html。使用这种方法,我怎么能刮所需的HTML,而不是javascript生成它?我已经通过在php中处理字符串来避免这个问题,但是我仍然很好奇在查看源代码/抓取页面时是否可以用这种方式显示解释过的HTML。
编辑:很好的回答,我学到了很多关于这里到底发生了什么,我应该远离什么做法。最简单的解决方案,将采取最少的努力,与我的原始问题是由贾斯汀伍德。
5条答案
按热度按时间ctehm74n1#
不太清楚您要做什么,但您可以使用类似以下内容看到与生成/修改的DOM等效的HTML:
或:
请参阅DEMO。
您可以使用包含以下代码的create a bookmarklet:
以在您查看的每个页面上查看由JavaScript修改的DOM的HTML。
更新:
如果你想在你的服务器上做一些Web抓取,在那里你想下载一些外部网页,执行它的JavaScript,然后在JavaScript执行后看到对应于DOM的HTML(使用document.write调用等等),然后尝试使用Zombie或Phantom。另请参见Mink,了解支持Zombie的PHP工具。
一般搜索带有JavaScript引擎的无头浏览器。
与人们在其他答案中所写的相反,这实际上是可能的。
r1zhe5dt2#
不要把你的PHP变量传递给javascript。只需要输出变量本身,然后用javascript来编辑你想编辑的内容...
你应该会喜欢的。
**注意:**我只在Chrome、FF和Safari中测试过这一点
fdx2calv3#
你不需要。HTML并不在源代码中。原始HTML包含需要执行的Javascript。该Javascript操作页面的DOM以向其添加更多内容。原始HTML并没有改变,它仍然只有Javascript。
如果要“抓取”Javascript生成的内容,则始终需要解析和执行整个页面(包括Javascript和DOM),并评估生成的更改后的DOM。
ekqde3dh4#
由于JavaScript是一种客户端语言,当您查看页面的源代码时,它不会被执行,因此视觉结果和源代码之间存在差异。您必须用PHP或其他服务器端语言替换JS,才能获得相同的结果。
此外,如果你仍然想使用JavaScript,那么你必须在JavaScript执行后查看DOM,或者文档对象,它包含所有的HTML节点。一种方法是使用Chrome中的检查器(CTRT + SHIFT + I)或者(右键单击-〉检查此元素)。
fnx2tebb5#
抛开Javascript参考,你真的在尝试“查看源代码”吗?这曾经是浏览器中的一个简单选项?一个帮助查找错别字等的香草外观?
在Chrome中,这是Ctl-U。不再是一个菜单选项,但工作2022-10-29。