我知道我可以使用许多方法从网页中检索所有网址,例如' mechanise',BeautifulSoup等等。
然而,问题是,某些页面可能包含由Javascript加密的URL或从.js文件中加载的URL。
在Firefox中,有一个名为" Live http header"的插件,当您打开此插件并访问网页时,该插件将为您提供已加载到其中的所有网址网页。
我想在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
有更好/更简单的方法吗?
答案 0 :(得分:1)
分析AdBlock + Firefox扩展的来源表明DOM没有提供这样的功能(only some limited collections,如images
)。
唯一的框架是jQuery Mobile - 显然,仅适用于通过该框架发出的请求。
相反,浏览器引擎提供与发出外部请求相关的事件(这可以解释为什么需要重新加载页面以查看FireBug中的请求)。 AdBlock +挂钩它们并将其自定义属性(包括URL和相关的过滤器引用)附加到浏览器的对象模型的适当节点。
所以,你需要
或者,您可以在网络级别执行此操作 - 使用嗅探器或代理。然后你将无法处理HTTPS:
答案 1 :(得分:0)
你可以使用Selenium。您应该以标准Selenium的方式打开页面,然后执行与The best way to inspect HTTP response headers with Selenium
相同的操作答案 2 :(得分:0)
要捕获可能由JavaScript生成的所有可能的URL,您可能必须有效地运行无头浏览器。一种可能性是使用Webkit库。谷歌搜索" python webkit"找到一些可能性。