提问人:Blarfor 提问时间:4/3/2013 最后编辑:mega6382Blarfor 更新时间:12/2/2016 访问量:7010
javascript转换后如何获取html源码?
How to get html source code after javascript transformation?
问:
对于学校的一个项目,我正在尝试制作一个网站,以比现在更漂亮的方式显示你的成绩。 我已经能够使用 cURL 登录该站点,现在我想以字符串形式获取成绩,以便我可以使用 PHP 对其进行编辑。 唯一的问题是 cURL 在未被获取成绩的 javascript 编辑时获取 html 源代码。
所以基本上我想要你在字符串中打开 firebug 或 inspector 时得到的代码,这样我就可以用 php 编辑它。
有没有人对如何做到这一点有想法?我看到几篇帖子说你必须等到页面加载完毕,但我不知道如何让我的网站等待另一个第三方网站加载。
我正在等待执行的代码,我想要的结果是这样的:
<script type="text/javascript">
var widgetWrapper = $("#objectWrapper325");
if (widgetWrapper[0].timer !== undefined) {
clearTimeout( jQuery('#objectWrapper325')[0].timer );
}
widgetWrapper[0].timer = setTimeout( function() {
if (widgetWrapper[0].xhr !== undefined) {
widgetWrapper[0].xhr.abort();
}
widgetWrapper[0].xhr = jQuery.ajax({
type: 'GET',
url: "",
data: {
"wis_ajax": 1,
"ajax_object": 325,
'llnr': '105629'
},
success: function(d) {
var goodWidth = widgetWrapper.width();
widgetWrapper.html(d);
/* update width, needed for bug with standard template */
$("#objectWrapper325 .result__overview").css('width',goodWidth-$("#objectWrapper325 .result__subjectlabels").width());
}
});
}, 500+(Math.random()*1000));
</script>
答:
首先,您必须了解使用 cURL 获取网页与使用浏览器访问同一页面之间的微妙但非常重要的区别。
1. 使用浏览器加载页面
当您在位置栏上输入地址时,浏览器会将 url 转换为 ip 地址。然后,它尝试使用该地址访问Web服务器,要求提供网页。从现在开始,浏览器将只与 Web 服务器进行 HTTP 对话。HTTP是一种用于通过网络传输文档的协议。浏览器实际上是在向 Web 服务器请求一个 html 文档(一堆文本)。Web 服务器通过将网页发送到浏览器来应答。如果网页是静态页面,则 Web 服务器只是选择一个 html 文件并通过网络发送。如果它是一个动态页面,Web 服务器使用一些高级代码(如 php)生成到网页,然后将其发送过来。
下载网页后,浏览器将解析该页面并解释其中的 html,从而在浏览器上生成实际的网页。在解析过程中,当浏览器找到标签时,它会将其内容解释为 javascript,这是浏览器中用于操纵网页外观并在浏览器中执行操作的语言。script
请记住,Web 服务器只发送了一个包含 html 内容的网页,他不知道什么是 javascript。
因此,当您在浏览器上加载网页时,只有在浏览器上下载后才会解释 javascript。
2. 什么是cURL
如果你看一下 curl 手册页,你就会知道 curl 是一个从/到服务器传输数据的工具,这些服务器可以使用一些支持的协议,HTTP 就是其中之一。 当您使用 curl 下载页面时,它会尝试以与浏览器相同的方式下载页面,但不会解析或解释任何内容。cURL 不懂 javascript 或 html,它只知道如何与 Web 服务器对话。
3. 解决方案
因此,在您的情况下,您需要像 cURL 一样下载页面,并以某种方式将 javascript 解释为好像它在浏览器中一样。
如果你把我带到这里,那么你就可以看看CasperJS了。
评论