使用Selenium下载谷歌搜索全尺寸图片的问题求助
谷歌图片全尺寸原图抓取方案
你当前拿到低清图的核心原因是点击缩略图后立刻抓取img属性,此时页面尚未完成全尺寸原图的加载,抓取到的是预渲染的缩略图缓存。
修复要点
- 点击缩略图后添加显式等待,跳过base64格式的缩略图缓存,直到加载出真实的http/https格式原图链接
- 优先获取img元素的
src属性,若为缩略图格式再尝试获取data-src等存储原图地址的自定义属性 - 避免使用高度依赖页面结构的绝对xpath,改用更稳定的元素定位规则
修正后代码
import os import time import urllib.request from selenium import webdriver from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 初始化浏览器(可替换为你使用的浏览器驱动) browser = webdriver.Chrome() name = "你的搜索关键词" # 替换为实际搜索关键词 barcode = "保存文件名" # 替换为实际文件命名规则 # 打开谷歌搜索 browser.get('https://www.google.com/') search = browser.find_element(By.NAME, 'q') search.send_keys(name, Keys.ENTER) # 切换到图片搜索页 elem = browser.find_element(By.LINK_TEXT, 'Images') elem.click() # 点击第一张搜索结果缩略图 first_thumb = WebDriverWait(browser, 10).until( EC.element_to_be_clickable((By.XPATH, '//*[@id="islrg"]/div[1]/div[1]/a[1]/div[1]/img')) ) first_thumb.click() # 等待右侧预览区原图加载完成,跳过base64缩略图 preview_img = WebDriverWait(browser, 10).until( EC.presence_of_element_located((By.XPATH, '//*[@id="Sva75c"]//div[contains(@class, "tvh9oe")]//img')) ) # 循环等待直到获取到非缩略图域名的真实原图链接 while True: src = preview_img.get_attribute('src') if src and src.startswith(('http://', 'https://')) and 'encrypted-tbn0.gstatic.com' not in src: break time.sleep(0.5) # 创建下载目录 try: os.mkdir('downloads') except FileExistsError: pass # 下载原图 try: urllib.request.urlretrieve(src, os.path.join('downloads', f'{barcode}.jpg')) print(f"下载成功,文件路径:downloads/{barcode}.jpg") except Exception as e: print(f"下载失败:{str(e)}") browser.quit()
注意事项
- 谷歌页面结构会不定期更新,若定位失效可自行调整xpath规则,优先通过父容器的稳定class属性定位元素
- 可根据网络情况调整等待时长,避免因加载过慢导致抓取失败
内容的提问来源于stack exchange,提问作者eptys
相关产品推荐
相关产品推荐

