Vic*_*ira 12 javascript php jquery curl http-headers
是否可以使用PHP获取URL的内容(使用某种类似的函数)file_get_contents或header仅在执行某些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并将可执行文件放在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.
/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)
The*_*e E -1
所有 PHP 在信息发送到客户端之前运行。所有 JavaScript 在信息发送到客户端后运行。
要在页面加载后使用 PHP 执行某些操作,页面需要
由于数据似乎与 PHP 位于不同的文件中,因此这是一个非常好的解决方案。既然您将其标记为 jQuery,我假设您正在使用它。
但使用 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 格式。
| 归档时间: |
|
| 查看次数: |
24529 次 |
| 最近记录: |