【问题标题】:How do you resolve a hidden javascript link with php?你如何用 php 解决隐藏的 javascript 链接?
【发布时间】:2010-10-12 08:03:14
【问题描述】:

我正在尝试使用 PHP 一个接一个地解析一堆网页,但我注意到当我打开第一页时,指向以下页面的链接隐藏在 javascript 中。

无论如何我可以继续解析下一个网页吗?如果 url 有一个像“page=2”这样的变量被加密,我会这样通过它们,但是 url 是加密的。

-液化石油气

【问题讨论】:

    标签: php javascript hyperlink hidden fopen


    【解决方案1】:

    基本上你有两个选择:

    1. 模仿他们的逻辑
    2. 模拟一个有效的客户端

    如果您想使用 #1,则必须阅读他们的 Javascript 代码并弄清楚它是如何工作的。我真的无法比这更好地解释它,因为它在很大程度上取决于他们的代码。您只需要了解 Javascript 并“了解”他们的代码。然后,让您的代码执行相同的逻辑来生成“下一页”URL。

    如果他们的系统使用 AJAX,您仍然可以模拟它(与 click-upvote 所说的相反)。为此,您只需使用 Firebug Firefox 扩展之类的工具,这样您就可以“在幕后”观察浏览器向其服务器发送的内容。然后,让您的代码发送一个模仿其 AJAX 请求的虚假 HTTP 请求。即使没有像 Firebug 这样的工具,您实际上也可以做到这一点:只需通过查看 Javascript 代码来推断您的浏览器将发送什么。然而,如果你使用像 Firebug 这样的东西,它会让事情变得更容易(而不是推断,你可以看到正在发送的内容)。

    如果您想改用#1,则需要使用实际的浏览器(并使用 Selenium 之类的东西以编程方式控制它),或者使用 Rhino 之类的东西来运行 Javascript。使用带有 Selenium 等控制系统的实际浏览器可能是最简单的方法。但是,它会很慢,因为它受到浏览器渲染页面等时间的限制。使用 Rhino 或类似的解决方案会更快,但它也会涉及更多工作(您必须解析 HTML,包括所有相关的 JS 文件等),所以我建议仅作为不得已。

    【讨论】:

      【解决方案2】:

      唯一的方法是编写一个正则表达式来解析 javascript 链接并跟踪它们。这可能仅在页面的 url 在 javascript 代码中时才有效,例如:

      <a href="javascript:open('something/some_page.html');">Something</a>
      

      而不仅仅是

      <a href="javascript:open(someField.value);">Something</a>
      

      因为对于第二个示例,您实际上必须使用 PHP 处理 javascript 链接,这可能非常具有挑战性。

      还要记住,您必须创建特定于网站的正则表达式,因为每个网站的 URL 格式都不同。所以Cnn.com 的网址格式可能与Reddit.com 不同

      【讨论】:

      猜你喜欢
      • 2011-11-24
      • 2014-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多