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

网页爬取:如何下载无img标签的鼠标悬停显示图片?

解决鼠标悬停显示图片的下载问题

从你提供的HTML代码来看,每个目标div的onmouseover属性中,playx函数的第一个参数就是图片文件名(比如img311.jpg、img312.jpg)。下面提供两种可行的下载方案:

方法1:直接提取图片URL下载(最便捷)

不需要模拟交互,直接从HTML属性中提取图片名并拼接完整URL下载:

from splinter import Browser
import requests

# 初始化浏览器并访问目标页面
browser = Browser('chrome')
browser.visit("你的目标页面完整URL")

# 获取所有包含悬停图片的div元素
target_divs = browser.find_by_css('.genre.scanme')

for div in target_divs:
    # 提取onmouseover属性值,拆分出图片文件名
    onmouseover_content = div['onmouseover']
    img_filename = onmouseover_content.split('"')[1]
    
    # 拼接完整图片URL(需根据网站实际图片存储路径调整,示例假设图片在域名根目录)
    base_url = f"{browser.url.split('://')[0]}://{browser.url.split('/')[2]}"
    img_url = f"{base_url}/{img_filename}"
    
    # 下载图片
    headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"}
    response = requests.get(img_url, headers=headers)
    if response.status_code == 200:
        with open(img_filename, 'wb') as f:
            f.write(response.content)
        print(f"图片 {img_filename} 下载完成")

browser.quit()

方法2:模拟鼠标悬停后加载图片再下载

如果图片URL带有动态参数或需要触发加载逻辑,可通过模拟悬停让图片显示,再获取其真实URL:

Splinter实现

from splinter import Browser
from splinter.driver.webdriver.actions import ActionChains
import requests

browser = Browser('chrome')
browser.visit("你的目标页面完整URL")

target_divs = browser.find_by_css('.genre.scanme')
action_chains = ActionChains(browser.driver)

for div in target_divs:
    # 模拟鼠标悬停,触发图片加载
    action_chains.move_to_element(div._element).perform()
    
    # 等待图片元素加载(需替换为实际页面中悬停图片的选择器,示例用id选择器)
    browser.is_element_present_by_css('#hover-display-img', wait_time=3)
    img_element = browser.find_by_css('#hover-display-img').first
    img_url = img_element['src']
    
    # 下载图片
    img_filename = img_url.split('/')[-1]
    headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"}
    response = requests.get(img_url, headers=headers)
    if response.status_code == 200:
        with open(img_filename, 'wb') as f:
            f.write(response.content)
        print(f"图片 {img_filename} 下载完成")
    
    # 鼠标移开,避免干扰下一个元素
    action_chains.move_to_element(browser.find_by_tag('body').first._element).perform()

browser.quit()

Selenium实现

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
import requests

driver = webdriver.Chrome()
driver.get("你的目标页面完整URL")
wait = WebDriverWait(driver, 10)

# 等待目标div加载完成
target_divs = wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, '.genre.scanme')))
action_chains = ActionChains(driver)

for div in target_divs:
    # 悬停触发图片加载
    action_chains.move_to_element(div).perform()
    
    # 等待图片元素出现(替换为实际图片选择器)
    img_element = wait.until(EC.presence_of_element_located((By.ID, 'hover-display-img')))
    img_url = img_element.get_attribute('src')
    
    # 下载图片
    img_filename = img_url.split('/')[-1]
    headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"}
    response = requests.get(img_url, headers=headers)
    if response.status_code == 200:
        with open(img_filename, 'wb') as f:
            f.write(response.content)
        print(f"图片 {img_filename} 下载完成")
    
    # 鼠标移开
    action_chains.move_to_element(driver.find_element(By.TAG_NAME, 'body')).perform()

driver.quit()

关键注意点

  • URL路径调整:如果网站图片存放在子目录(如/static/images/),需要修改拼接URL的逻辑,确保路径正确。
  • 反爬规避:添加合理的User-Agent请求头,避免被网站拦截。
  • 选择器验证:模拟悬停时,需通过浏览器开发者工具确认加载后图片的真实选择器(ID、CSS类等),替换示例中的占位选择器。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 09:25:53