gpt4 book ai didi

python - 检索页面中所有外部对象的 URL,包括。动态加载

转载 作者:太空宇宙 更新时间:2023-11-03 17:53:43 25 4
gpt4 key购买 nike

我知道我可以使用许多方法从网页检索所有网址,例如“mechanize”、BeautifulSoup 等。

但是,问题是,某些页面可能包含由 Javascript 加密的 URL 或从 .js 文件或其他文件内部加载的 URL。

在 Firefox 中,有一个名为“Live http headers”的插件,当您打开此插件并访问网页时,该插件将为您获取该网页内已加载的所有 URL。

我想在 python 中做同样的事情,有什么想法吗?

PS:我设法通过 PhantomJS 和 python webproxy 来完成此操作,然后解析 python 代理输出。

#!/usr/bin/env python
from selenium import webdriver
service_args = [
'--proxy=127.0.0.1:8899',
'--proxy-type=http',
]
driver = webdriver.PhantomJS(service_args=service_args)
driver.get("http://example.com")
print driver.current_url
driver.quit

有更好/更简单的方法吗?

最佳答案

分析 AdBlock+ Firefox 扩展的源代码表明 DOM 不提供此类功能(only some limited collections 就像 images)。唯一这样做的框架是 jQuery Mobile - 显然,仅适用于通过该框架发出的请求。

相反,浏览器引擎提供与发出外部请求相关的事件(这可以解释为什么您需要重新加载页面才能在 FireBug 中查看请求)。 AdBlock+ Hook 这些并将其自定义属性(包括 URL 和相关过滤器引用)附加到浏览器对象模型的适当节点。

所以,你需要要么

  • 编写一个插件,将该信息反射(reflect)到页面中,或者
  • 将浏览器引擎嵌入到您的应用中并接收“来自另一端”的事件,或者
  • 使用 UI 查询工具(例如 Firefox 支持 MSAA)通过浏览器的 UI 从现有插件/内置功能中检索信息。

或者,您可以在网络级别上执行此操作 - 使用嗅探器或代理。那么你在处理 HTTPS 时就会遇到麻烦:

  • 用嗅探器,
    • 需要服务器的私钥来解密流量
  • 代理需要
    • 解密响应以读取 URL
    • 之后使用自己的证书重新加密(可能会导致浏览器中出现安全警告)

关于python - 检索页面中所有外部对象的 URL,包括。动态加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28787574/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com