使用file_get_content下载javascript输出


Download javascript output using file_get_content

是否可以在使用PHP运行页面上的JavaScript代码后下载生成的HTML代码?

例如,当页面有这个jQuery代码$("p").html("Hello world");和我使用file_get_content('website.com')我不得到字符串"Hello world",因为JavaScript在页面加载后运行。

use cURL:

function get_data($url)
{
  $ch = curl_init();
  $timeout = 5;
  curl_setopt($ch,CURLOPT_URL,$url);
  curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
  curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout);
  $data = curl_exec($ch);
  curl_close($ch);
  return $data;
}

然后:

<?php echo get_data('http://theURLhere.com'); ?>

希望有帮助

请参考类似的问题,并分享你目前为止所做的研究:

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

  • 使用PHP获取AJAX或js操作后的文档源

  • 如何在网站上获得javascript/ajax加载的div内容?

  • 使用CURL PHP获取javascript执行后的HTML代码

实现这一点的一种方法是使用Selenium,并编写一个自定义脚本来收集它的输出…但我相信这远远超出了你想要做的范围。

我要做的是把责任倒置。让JS将输出发送到PHP端点,然后使用你认为合适的输出。

下面是一个例子。

Javascript

<script>
var outputElement = 'html';
var HTML = $(outputElement).html();
var endpoint = 'myEndpoint.php';
$.post(endpoint, { html: HTML }, function(data) {
    alert('Output sent');
});
</script>

这里的一个警告是,您将无法获得DOCTYPE声明,或HTML标记上的任何属性,如果这是不可接受的,您可以在下面的PHP文件中重建它们。

PHP

<?php
$html = $_POST['html']; // Be VERY CAREFUL with what you do with this...
// If you need to have the doctype and html tag... Use your own doctype.
// $html = sprintf('<DOCTYPE html><html class="my-class">%s</html>', $html);
// Do something with the HTML.
当你通过POST发送HTML时,你必须非常小心。如果你在你的网站上使用这个HTML输出,它很容易被欺骗,泄露你网站上的敏感数据。 参考

  • jQuery.post ()