Selenium获取图片问题:无法打开图片src URL求技术协助
问题排查与修复方案
我来帮你梳理下代码里的问题,为啥程序没反应还不报错——主要是语法、API用法和逻辑上的几个坑:
1. 语法错误 + urllib2.urlopen用错了
你写的代码里,images=driver.find_elements_by_tag_name('img')后面直接跟for循环,没有缩进,Python会把这当成一行无效代码;而且urllib2.urlopen()的第二个参数不是保存路径,它是用来传POST数据的,根本不是用来指定文件保存位置的。
2. 缺少文件写入逻辑
就算urlopen成功获取了图片内容,你也没把内容写到本地文件里,等于白忙活了。
3. 容易忽略的潜在问题
- 页面可能还没加载完就去抓图片元素,导致
find_elements_by_tag_name返回空列表,自然没反应 - 有些图片的
src是空值、相对路径,或者是base64格式的内嵌图片,直接用urlopen会失败但没提示 - 没有异常捕获,就算中间出错了也不会告诉你,看起来就像“没反应”
修复后的完整代码
from selenium import webdriver import urllib2 import time # 初始化浏览器驱动(这里用Chrome举例,记得提前配置好驱动路径) driver = webdriver.Chrome() driver.get("你的目标页面URL") # 替换成你要爬的页面地址 # 等页面加载完全(这里用隐式等待,也可以用更精准的显式等待) driver.implicitly_wait(10) # 获取所有图片元素 images = driver.find_elements_by_tag_name('img') # 遍历处理每个图片 for idx, image in enumerate(images): img_src = image.get_attribute('src') # 跳过无效的src(空值或者base64内嵌图) if not img_src or img_src.startswith('data:image'): continue # 处理相对路径的情况,拼接成完整URL if not img_src.startswith('http'): img_src = f"{driver.current_url}{img_src}" try: # 拉取图片内容 response = urllib2.urlopen(img_src) img_data = response.read() # 写入本地文件(加索引避免重复覆盖) with open(f"/var/node/1/shantikunjtoday_{idx}.png", "wb") as img_file: img_file.write(img_data) print(f"成功保存图片: {img_src}") except Exception as e: # 捕获异常并打印,方便排查问题 print(f"保存图片失败 [{img_src}]: {str(e)}") # 关闭浏览器 driver.quit()
额外优化小 tips
- 如果是Python3环境,
urllib2已经被拆分了,要换成urllib.request:把import urllib2改成import urllib.request,urllib2.urlopen改成urllib.request.urlopen - 建议用显式等待代替隐式等待,比如等页面至少有一张图片加载出来:
from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.TAG_NAME, 'img'))) - 检查
/var/node/1/目录是否存在,当前用户有没有写入权限,不然会悄悄失败
内容的提问来源于stack exchange,提问作者Mansi Mehta
相关产品推荐
相关产品推荐

