查看javascript生成的html页面的实际html源代码

o3imoua4  于 2022-10-30  发布在  Java
关注(0)|答案(5)|浏览(172)

假设我有一段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。
编辑:很好的回答,我学到了很多关于这里到底发生了什么,我应该远离什么做法。最简单的解决方案,将采取最少的努力,与我的原始问题是由贾斯汀伍德。

ctehm74n

ctehm74n1#

不太清楚您要做什么,但您可以使用类似以下内容看到与生成/修改的DOM等效的HTML:

document.documentElement.innerHTML

或:

document.getElementById("some_id").innerHTML

请参阅DEMO
您可以使用包含以下代码的create a bookmarklet

alert(document.documentElement.innerHTML);

以在您查看的每个页面上查看由JavaScript修改的DOM的HTML。

更新:

如果你想在你的服务器上做一些Web抓取,在那里你想下载一些外部网页,执行它的JavaScript,然后在JavaScript执行后看到对应于DOM的HTML(使用document.write调用等等),然后尝试使用ZombiePhantom。另请参见Mink,了解支持Zombie的PHP工具。
一般搜索带有JavaScript引擎的无头浏览器。
与人们在其他答案中所写的相反,这实际上是可能的。

r1zhe5dt

r1zhe5dt2#

不要把你的PHP变量传递给javascript。只需要输出变量本身,然后用javascript来编辑你想编辑的内容...

<?php
$html = "<html><head><title></title></head><body><p id='p'>Something</p></body></html>";

echo $html;
?>

<script type="text/javascript">
  document.getElementById("p").innerHTML = "blah";
</script>

你应该会喜欢的。

**注意:**我只在Chrome、FF和Safari中测试过这一点

fdx2calv

fdx2calv3#

你不需要。HTML并不在源代码中。原始HTML包含需要执行的Javascript。该Javascript操作页面的DOM以向其添加更多内容。原始HTML并没有改变,它仍然只有Javascript。
如果要“抓取”Javascript生成的内容,则始终需要解析和执行整个页面(包括Javascript和DOM),并评估生成的更改后的DOM。

ekqde3dh

ekqde3dh4#

由于JavaScript是一种客户端语言,当您查看页面的源代码时,它不会被执行,因此视觉结果和源代码之间存在差异。您必须用PHP或其他服务器端语言替换JS,才能获得相同的结果。
此外,如果你仍然想使用JavaScript,那么你必须在JavaScript执行后查看DOM,或者文档对象,它包含所有的HTML节点。一种方法是使用Chrome中的检查器(CTRT + SHIFT + I)或者(右键单击-〉检查此元素)。

fnx2tebb

fnx2tebb5#

抛开Javascript参考,你真的在尝试“查看源代码”吗?这曾经是浏览器中的一个简单选项?一个帮助查找错别字等的香草外观?
在Chrome中,这是Ctl-U。不再是一个菜单选项,但工作2022-10-29。

相关问题