【问题标题】:How to get html source code after javascript transformation?javascript转换后如何获取html源代码?
【发布时间】:2013-03-24 09:47:33
【问题描述】:

对于学校的一个项目,我正在尝试制作一个网站,该网站可以以比现在更漂亮的方式显示您的成绩。 我已经能够使用 cURL 登录到该站点,现在我想以字符串形式获取成绩,以便可以使用 PHP 对其进行编辑。 唯一的问题是,当 cURL 没有被获取成绩的 javascript 编辑时,它会获取 html 源代码。

所以基本上我想要你在字符串中打开 firebug 或检查器时得到的代码,以便我可以用 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 生成的内容 - 这就是为什么它称为服务器端和客户端 - 服务器端只能接受服务器提供的服务,客户端处理客户端数据 - 你可以做什么是嗅探那个页面并调用ajax js代码正在调用的页面——然后获取响应并在服务器中处理它
  • 如果我理解正确,这个过程与你想做的相反。 PHP 在任何客户端之前执行。您必须在另一个页面上提取信息并使用 ajax 调用之类的方法来收集信息并显示它。或者从一侧提取信息,然后将其放入数据库中,然后将其推送到您要查看的页面。
  • 这就是像phantomjs或zombiejs这样有用的地方
  • 您将无法使用 PHP 对其进行编辑,因为 PHP 是在服务器中执行的(远离您的计算机),而 HTML/Javascript 只是代码,直到它到达您的浏览器(此时 PHP已经解决了,无法执行)
  • @David:哈哈,我不是要截取我的成绩,我只是想显示它们。无需担心;)

标签: php javascript html curl


【解决方案1】:

首先,您必须了解使用 cURL 获取网页与使用浏览器访问同一页面之间的细微但非常重要的区别。

1。使用浏览器加载页面

当您在地址栏输入地址时,浏览器会将 url 转换为 ip 地址。然后它会尝试使用该地址访问 Web 服务器 以请求网页。从现在开始,浏览器将只与网络服务器对话 HTTP。 HTTP 是一种用于通过网络传输文档的协议。浏览器实际上是从 Web 服务器请求一个 html 文档(一堆文本)。 Web 服务器通过将网页发送到浏览器来回答。如果网页是静态页面,则 Web 服务器只是选择一个 html 文件并通过网络发送它。如果它是一个动态页面,Web 服务器会使用一些高级代码(如 php)生成网页,然后将其发送过来。

下载网页后,浏览器将解析该网页并解释其中的 html,从而在浏览器上生成实际网页。在解析过程中,当浏览器找到script 标签时,它会将其内容解释为javascript,这是一种在浏览器中用于操纵网页外观并在浏览器内部进行操作的语言。

记住,网络服务器只发送了一个包含 html 内容的网页,他不知道什么是 javascript。

因此,当您在浏览器上加载网页时,javascript 仅在下载到浏览器后才会被解释。

2。什么是卷曲

如果您查看 curl 手册页,您将了解到 curl 是一种从服务器传输数据/向服务器传输数据的工具,它可以使用一些支持的协议,而 HTTP 就是其中之一。 当您使用 curl 下载页面时,它会尝试以与浏览器相同的方式下载该页面,但不会解析或解释任何内容。 cURL 不理解 javascript 或 html,它所知道的只是如何与 Web 服务器对话。

3。解决方案

因此,在您的情况下,您需要像 cURL 那样下载页面,并以某种方式使 javascript 被解释为就好像它在浏览器中一样。

如果你跟着我到这里,那么你准备好看看CasperJS

【讨论】:

  • 好的,我明白你所说的一切,cURL 没有 java 解释器,因为它不是浏览器。我已经阅读了一些提到 phantomJS 和其他相关实用程序的帖子,但我不知道如何使用它们。如果我下载该库,是否只有一个函数,如解释.javascript 或使 javascirpt 工作的东西?
  • 另外,我不是唯一应该能够看到我的成绩的人。您的计算机上是否安装了 PhantomJs 和 CasperJS,或者它只是一个可以包含在服务器目录中的存储库?
  • Javascript.. 不是 java。它们是两种不同的语言。
猜你喜欢
  • 1970-01-01
  • 2019-03-30
  • 2019-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-06
  • 2012-04-22
相关资源
最近更新 更多