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

时间:2015-02-13 17:43:13

标签: javascript php jquery curl http-headers

是否可以使用PHP(使用某种函数,如file_get_contentsheader)获取URL的内容,但只能在执行某些JavaScript代码之后?

示例:

mysite.com有一个执行loadUrlAfterJavascriptExec('http://exampletogetcontent.com/')并打印/回显内容的脚本。想象一下jQuery在http://exampletogetcontent.com/上运行会改变DOM,而loadUrlAfterJavascriptExec会得到生成的HTML

我们可以这样做吗?

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

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

4 个答案:

答案 0 :(得分:14)

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

更新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);
    ?>

获取-website.js

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

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

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

方法2:将Ajax与PHP一起使用(没有幻像,因此赢得了javascript);

<强> /get-website.php

<?php

    $html=file_get_contents('http://google.com');
    echo $html;
    ?>

<强>的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>

答案 1 :(得分:0)

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

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

  1. 重新加载,将JavaScript生成的信息保存在cookie中或保存为POST数据(不理想)或
  2. 对另一个PHP文件进行Ajax调用以获取数据。 (好多了)
  3. 由于数据看起来与PHP不同,因此这是一个非常好的解决方案。既然你把它标记为jQuery,我假设你正在使用它。

    jQuery has a set of pages about how it implements Ajax

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

    例如:

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

    $.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
    });
    

    数据应该是键/值对中的JSON格式。

答案 2 :(得分:0)

我在此找到了一个很棒的页面,这是一个完整的教程,介绍了如何在PHP中处理页面的DOM,这完全是使用javascript创建的。

https://www.jacobward.co.uk/using-php-to-scrape-javascript-jquery-json-websites/ “ PhantomJS开发被暂停,直到另行通知”,这样的选择不是一个好选择。

答案 3 :(得分:0)

我认为最简单,最好的方法是使用此软件包 https://github.com/spatie/browsershot 只需完全安装并使用下面的代码

Browsershot::url('https://example.com')->bodyHtml()