在Javascript运行PHP之后获取URL的内容(文本)

Vic*_*ira 12 javascript php jquery curl http-headers

是否可以使用PHP获取URL的内容(使用某种类似的函数)file_get_contentsheader仅在执行某些JavaScript代码之后?

例:

mysite.com有一个脚本可以执行loadUrlAfterJavascriptExec('http://exampletogetcontent.com/')并打印/回显内容.想象一下,一些jQuery运行http://exampletogetcontent.com/就会改变DOM,并且loadUrlAfterJavascriptExec会获得生成的HTML

我们可以这样做吗?

为了清楚起见,我想要的是通过URL获取页面内容,但只有在目标页面上运行JavaScript之后(PHP才能获取其内容).

我知道PHP在页面发送到客户端之前运行,而JS只在那之后运行,但是认为可能有专家解决方法.

And*_*ewD 14

更新2添加有关如何phantomjs从PHP 使用的更多详细信息.

更新1(澄清目标页面上的javascript 需要先运行)

方法1:使用phantomjs(将执行javascript);

1.下载phantomjs并将可执行文件放在PHP二进制文件可以到达的路径中.

2.将以下2个文件放在同一目录中:

得到-website.php

<?php

    $phantom_script= dirname(__FILE__). '/get-website.js'; 


    $response =  exec ('phantomjs ' . $phantom_script);

    echo  htmlspecialchars($response);
    ?>
Run Code Online (Sandbox Code Playgroud)

得到-website.js

var webPage = require('webpage');
var page = webPage.create();

page.open('http://google.com/', function(status) {
 console.log(page.content);
  phantom.exit();
});
Run Code Online (Sandbox Code Playgroud)

3.浏览到get-website.php目标站点,http://google.com内容将在执行内联javascript后返回.您也可以使用命令行调用它php /path/to/get-website.php.

方法2:使用Ajax和PHP(没有pha​​ntomjs所以不会运行javascript);

/get-website.php

<?php

    $html=file_get_contents('http://google.com');
    echo $html;
    ?>
Run Code Online (Sandbox Code Playgroud)

的test.html

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>on demo</title>
<style>
p {
color: red;
}
span {
color: blue;
}
</style>
<script src="https://code.jquery.com/jquery-1.10.2.js"></script>
</head>
<body>
<button id='click_me'>Click me</button>
<span style="display:none;"></span>
<script>

$( "#click_me" ).click(function () {
    $.get("/get-website.php", function(data) {
        var json = {
            html: JSON.stringify(data),
            delay: 1
        };
        alert(json.html);
        });
});
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

  • 这是过时的,PhantomJS 不再生产。 (2认同)

The*_*e E -1

所有 PHP 在信息发送到客户端之前运行。所有 JavaScript 在信息发送到客户端后运行。

要在页面加载后使用 PHP 执行某些操作,页面需要

  1. 重新加载,将 JavaScript 生成的信息保存在 cookie 中或作为 POST 数据(不理想)或
  2. 对另一个 PHP 文件进行 Ajax 调用以获取数据。(好多了)

由于数据似乎与 PHP 位于不同的文件中,因此这是一个非常好的解决方案。既然您将其标记为 jQuery,我假设您正在使用它。

jQuery 有一组关于如何实现 Ajax 的页面

但使用 jQuery 最简单的方法是.post

前任:

$.post( "http://example.com/myDataFile.txt", function( data ) {
    //do more JavaScript stuff with the data you just retrieved
});
Run Code Online (Sandbox Code Playgroud)

$.post()顾名思义,可以将数据与数据文件的请求一起发送,因此,如果该请求是针对 PHP 文件,则 PHP 文件可以使用该数据。

前任:

$.post( "http://example.com/myDataFile.txt",
    { foo: "bar"; yabba: "dabba" },
    function( data ) {
       //do more JavaScript stuff with the data you just retrieved
});
Run Code Online (Sandbox Code Playgroud)

数据应采用键/值对的 JSON 格式。