【问题标题】:How to get HTML with “JavaScript enabled”?如何在“启用 JavaScript”的情况下获取 HTML?
【发布时间】:2011-01-25 12:44:17
【问题描述】:

我想使用 PHP 从页面中获取 HTML 代码。所以我这样做:

$url = 'http://en.wikipedia.org/wiki/New_York_City';
$html = file_get_html($url);

问题是,Wikipedia 不会将<script> 标记发送到 PHP 请求,因此它不会显示 JavaScript。 我猜这是因为 Wikipedia 看到“请求者”没有启用 JavaScript,所以它没有发送 <script> 标签。

如何让 Wikipedia 知道我的 PHP 启用了 JavaScript

我听说过流上下文,但我不知道如何为其设置 JavaScript 启用

【问题讨论】:

  • file_get_html 不在默认的 php 库中。你是从哪里得到这个函数的?
  • 是的,我忘了提。 file_get_html 是 simple_html_dom 的函数。
  • 尝试为支持 javascript 的浏览器伪造用户代理
  • 它确实有效!谢谢! ;)

标签: javascript php html stream


【解决方案1】:

感谢 symcbean,这是解决方案。

我补充说:

ini_set('user_agent', 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.9) Gecko/20071025 Firefox/2.0.0.9');

现在它正在发送正确的脚本块。

;)

【讨论】:

    【解决方案2】:

    这应该可行

    $url = 'http://en.wikipedia.org/wiki/New_York_City';
    $html = file_get_contents($url);
    

    在我的本地 PHP 服务器上测试过。

    【讨论】:

    【解决方案3】:

    看起来file_get_html() 函数正在剥离<script> 块,因为我尝试在没有任何请求标头的情况下从 Fiddler 请求 GET /wiki/Main_Page HTTP/1.1,它确实在响应中返回了 <script> 块。

    【讨论】:

    • file_get_contents 也是如此。是否取决于用户代理?
    • @DavidDev:我在 Fiddler 中试过没有用户代理标头,但我仍然收到 <script> 块。它理论上可以根据用户代理提供不同的内容,但我怀疑维基百科正在这样做。这会使他们的缓存过程复杂化。
    • 嗯,我不知道。我会在另一个网络服务器上尝试。无论如何,谢谢!
    【解决方案4】:

    您可以使用 iframe。

    您还可以使用 jQuery 之类的工具将页面(或页面的某些部分)抓取到您的网站上。

    【讨论】:

    • 哇,有些人真的相信 jquery 是一切的答案。他确实指定他正在寻找 PHP 解决方案。
    • 另外,你不能单独使用 JavaScript 抓取另一个页面...en.wikipedia.org/wiki/Same_origin_policy
    猜你喜欢
    • 1970-01-01
    • 2022-06-10
    • 1970-01-01
    • 1970-01-01
    • 2022-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多