Selenium Python获取所有加载的url的列表(图像、脚本、样式表等)

2024-04-19 23:21:12 发布

您现在位置:Python中文网/ 问答频道 /正文

当googlechrome通过Selenium加载web页面时,它可能会加载页面所需的其他文件,例如来自<img src="example.com/a.png"><script src="example.com/a.js">标记。此外,CSS文件。在

如何获取浏览器加载页面时下载的所有URL的列表?(在编程上,在Python和chromedriver中使用Selenium) 也就是说,Chrome中开发者工具的“网络”选项卡中显示的文件列表(显示下载的文件列表)。在

使用Selenium、chromedriver的示例代码:

from selenium import webdriver
options = webdriver.ChromeOptions()
options.binary_location = "/usr/bin/x-www-browser"
driver = webdriver.Chrome("./chromedriver", chrome_options=options)
# Load some page
driver.get("https://example.com")
# Now, how do I see a list of downloaded URLs that took place when loading the page above?

Tags: 文件srccomweb列表exampledriverselenium
2条回答

继续@GPT14在他的answer中的建议,我编写了一个小脚本,它完全实现了我想要的,并打印了某个页面加载的url列表。在

这使用BrowserMob代理。非常感谢@GPT14建议使用它,它非常适合我们的目的。我修改了他的答案,并将其修改为googlechrome webdriver而不是Firefox。我还扩展了该脚本,以便它遍历HAR-JSON输出并列出所有请求url。记住根据您的需要调整以下选项。在

from browsermobproxy import Server
from selenium import webdriver

# Purpose of this script: List all resources (URLs) that
# Chrome downloads when visiting some page.

### OPTIONS ###
url = "https://example.com"
chromedriver_location = "./chromedriver" # Path containing the chromedriver
browsermobproxy_location = "/opt/browsermob-proxy-2.1.4/bin/browsermob-proxy" # location of the browsermob-proxy binary file (that starts a server)
chrome_location = "/usr/bin/x-www-browser"
###############

# Start browsermob proxy
server = Server(browsermobproxy_location)
server.start()
proxy = server.create_proxy()

# Setup Chrome webdriver - note: does not seem to work with headless On
options = webdriver.ChromeOptions()
options.binary_location = chrome_location
# Setup proxy to point to our browsermob so that it can track requests
options.add_argument(' proxy-server=%s' % proxy.proxy)
driver = webdriver.Chrome(chromedriver_location, chrome_options=options)

# Now load some page
proxy.new_har("Example")
driver.get(url)

# Print all URLs that were requested
entries = proxy.har['log']["entries"]
for entry in entries:
    if 'request' in entry.keys():
        print entry['request']['url']

server.stop()
driver.quit()

您可能想看看BrowserMob代理。它可以捕获web应用程序的性能数据(通过HAR格式),还可以操纵浏览器行为和流量,例如白名单和黑名单内容,模拟网络流量和延迟,以及重写HTTP请求和响应。在

取自readthedocs,用法简单,与selenium webdriver api集成良好。您可以阅读有关BMPhere的更多信息。在

from browsermobproxy import Server
server = Server("path/to/browsermob-proxy")
server.start()
proxy = server.create_proxy()

from selenium import webdriver
profile  = webdriver.FirefoxProfile()
profile.set_proxy(proxy.selenium_proxy())
driver = webdriver.Firefox(firefox_profile=profile)


proxy.new_har("google")
driver.get("http://www.google.co.uk")
proxy.har # returns a HAR JSON blob

server.stop()
driver.quit()

相关问题 更多 >