You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python 3从URL下载图片?代码报URLError如何解决?

报错原因

  • 目标站点配置了反爬规则,urllib.request发起独立请求时没有携带Selenium浏览器会话中的Cookies、User-Agent等校验信息,被服务器主动拒绝访问
  • 部分存储资源站会限制非浏览器环境的直接请求,即使拿到资源直链,无有效会话信息的请求也会被拦截
  • 若本地配置了网络代理,urllib默认不会复用Selenium的代理配置,也可能触发连接失败

可行解决方案

方案1:给urllib配置Selenium会话信息后再请求

修改后的代码如下:

import urllib.request 
from selenium import webdriver
driver = webdriver.Chrome('c://CSALE//chromedriver.exe')
driver.get('https://kbdevstorage1.blob.core.windows.net/asset-blobs/19950_en_1')
img = driver.find_element_by_xpath('/html/body/img').get_attribute('src')

# 复用当前浏览器的请求头和Cookie构造urllib请求
opener = urllib.request.build_opener()
opener.addheaders = [
    ("User-Agent", driver.execute_script("return navigator.userAgent")),
    ("Cookie", "; ".join([f"{c['name']}={c['value']}" for c in driver.get_cookies()]))
]
urllib.request.install_opener(opener)

urllib.request.urlretrieve(img, "wolf.png")
driver.close()

方案2:直接用Selenium元素截图能力,跳过额外请求

当前页面只有目标图片一个元素时,直接对元素截图即可,不会触发额外的请求拦截,实现更简单:

from selenium import webdriver
driver = webdriver.Chrome('c://CSALE//chromedriver.exe')
driver.get('https://kbdevstorage1.blob.core.windows.net/asset-blobs/19950_en_1')
# 直接对图片元素截图保存
driver.find_element_by_xpath('/html/body/img').screenshot("wolf.png")
driver.close()

内容的提问来源于stack exchange,提问作者Tikkaty

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 04:21:02