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

2022-08-30 22:19:39

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

例:

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

我们能做到吗?

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

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


答案 1

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

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

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

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

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

获取网站.php

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


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

    echo  htmlspecialchars($response);
    ?>

获取网站.js

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

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

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

方法2:将Ajax与PHP一起使用(没有phantomjs,所以不会运行javascript);

/get-website.php

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

测试.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>

答案 2

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

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