2

我有这个问题好几天了...我必须从 php 加载页面的整个 html。在此页面上,有一个 jquery 函数,当所有页面加载完毕时会调用该函数。此函数将其他 html 加载到页面中,因此我必须加载所有 html(也加载了 jquery 的部分)。我可以知道我让所有页面都试图找到一些仅从 jquery 加载的标签。(例如:名称为XXX的标签输入、属性多的标签输入等)

所以我尝试:

$html = file_get_contents("http://wwww.siteToScrape.com");
if (strpos($html, 'multiple') !== false) {
    echo 'found';
} else {
    echo 'not found';
}

但结果是“未找到”。

然后我下载了简单的 html dom并尝试:

include 'simple_html_dom.php';
$html = file_get_html("http://wwww.siteToScrape.com");
if (strpos($html, 'multiple') !== false) {
    echo 'found';
} else {
    echo 'not found';
}

但结果仍然“未找到”。

所以我想得到一些 php 脚本来模拟浏览器(所以也可以加载 jquery),我下载了PHP Scriptable Web Browser并尝试:

require_once('browser.php');
$browser = new SimpleBrowser();
$p = $browser->get('http://wwww.siteToScrape.com');
if (strpos($p, 'multiple') !== false) {
    echo 'found';
} else {
    echo 'not found';
}

但结果仍然是“未找到”。我不知道该怎么做..有人可以帮助我吗?谢谢!!!!

4

3 回答 3

2

据我所知, “仅使用 PHP”是不可能的。Javascript 在客户端而不是服务器上运行,因此如果没有某种浏览器模拟器环境是不可能的。

编辑:您可以将 javascript 放在网页本身中,这将在整个网页完全生成后获取整个网页的 innerHTML,然后使用 ajax 调用将其发送到您的服务器。您必须保持在同源策略的限制范围内(这不允许您对主机网页来自的域以外的域进行 ajax 调用)。

于 2012-05-08T22:49:05.617 回答
2

问题是您正在尝试混合服务器和客户端。

PHP 在服务器上运行 Javascript(因此也包括 jQuery)在客户端浏览器中运行。

使用 PHP 运行 javascript 没有简单的方法。据我所知,这甚至是不可能的。其他语言(例如 Java)可能能够完成您正在尝试做的事情。

你应该看看另一种方法来做到这一点。

这也是为什么网络爬虫永远不会受到您使用 javascript 所做的事情的影响的原因。这是开发时要牢记的一件好事。这些爬虫根本不会为您的动态加载编制索引。

于 2012-05-08T22:52:24.630 回答
1

就像其他人所说的那样,jquery 是 javascript,通常由客户端(Web 浏览器)而不是服务器执行。

PHP 作为一种服务器端语言,没有 javascript 解释器。

我所知道的使用 PHP 运行 javascript 的最简单方法是通过 Web 测试工具,该工具通常集成了无头浏览器。您可以查看mink ,它具有僵尸node.js 无头浏览器的后端。

还有带有各种 PHP 接口的 phantomjs 无头浏览器通过快速的谷歌搜索找到了它。

在资源更密集的领域,还有selenium,它也有 PHP 接口。

于 2012-05-09T14:06:35.940 回答