javascript转换后如何获取html源码?

How to get html source code after javascript transformation?

提问人:Blarfor 提问时间:4/3/2013 最后编辑:mega6382Blarfor 更新时间:12/2/2016 访问量:7010

问:

对于学校的一个项目,我正在尝试制作一个网站,以比现在更漂亮的方式显示你的成绩。 我已经能够使用 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>
php javascript html 卷曲

评论

0赞 Adidi 4/3/2013
你无法从 PHP 获取 javascript 中生成的内容 - 这就是为什么它调用服务器端和客户端 - 服务器端只能接受服务器提供的内容和客户端处理客户端数据 - 你可以做的是嗅探该页面并调用 ajax js 代码正在调用的页面 - 然后获取响应并在服务器中处理它
0赞 ntgCleaner 4/3/2013
如果我理解正确的话,这个过程与你想做的事情相反。PHP 在客户端执行之前执行。您必须在另一个页面上提取信息,并使用类似 ajax 调用的东西来收集信息并显示它。或者从一侧提取信息,然后将其放入数据库中,然后将其推送到要查看的页面。
0赞 Mark Baker 4/3/2013
这就是像phantomjs或zombiejs这样的东西有用的地方
0赞 Ryoku 4/3/2013
您将无法使用 PHP 编辑它,因为 PHP 是在服务器(远离您的计算机)中执行的,而 HTML/Javascript 在到达您的浏览器之前只不过是代码(此时 PHP 已经解析,您无法执行它)
1赞 Blarfor 4/3/2013
@David:哈哈,我不是想截截我的成绩,我只是想展示它们。不用担心;)

答:

6赞 blob42 4/3/2013 #1

首先,您必须了解使用 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了。

评论

0赞 Blarfor 4/3/2013
好的,我理解你所说的一切,cURL 没有 java 解释器,因为它不是浏览器。我读过一些提到phantomJS和其他相关实用程序的帖子,但我不知道如何使用它们。如果我下载该库,是否只有像 interpret.javascript 这样的函数或使 javascirpt 工作的东西?
1赞 Blarfor 4/3/2013
此外,我不是唯一一个应该能够看到我的成绩的人。您的计算机上是否安装了 PhantomJs 和 CasperJS,或者它只是一个可以包含在服务器上目录中的存储库?
4赞 Daedalus 4/4/2013
Javascript..不是 Java。它们是两种不同的语言。