如何通过Python+Selenium点击‘保存图片’按钮下载图片
问题:无法通过Selenium点击“保存图片”按钮下载气象图
我用Python+Selenium尝试点击页面上的「保存图片」按钮下载对应图片,已经搞定Cookie弹窗的关闭,但始终点不了这个按钮。(按钮截图:
)
我尝试通过ID、类名定位按钮,但系统一直提示按钮不可点击,我的代码如下:
from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By driver = webdriver.Edge() mateo = "https://www.meteoblue.com/en/weather/14-days/ottawa_canada_6094817" driver.get(mateo) driver.implicitly_wait(10) driver.find_element(By.CLASS_NAME, "form-group").click() #HREF link link = "http://my.meteoblue.com/visimage/meteogram_14day_hd?download=1&look=KILOMETER_PER_HOUR%2CCELSIUS%2CMILLIMETER&apikey=5838a18e295d&temperature=C&windspeed=kmh&precipitationamount=mm&winddirection=3char&city=Ottawa&iso2=ca&lat=45.4112&lon=-75.6981&asl=71&tz=America%2FToronto&lang=en&ts=1686662836&sig=171b0d835cf2ae17a032512cf41b1244" driver.find_element(By.CSS_SELECTOR, "glyph download").click()
解决方法
问题分析
- CSS选择器错误:你写的
"glyph download"不符合CSS语法,类名选择器需要用.前缀,多个类名直接连写,正确应为.glyph.download。 - 未确保元素可交互:隐式等待无法精准判断元素是否处于可点击状态,容易出现元素已加载但不可交互的情况。
- 已有直接下载链接,无需通过点击按钮实现,直接请求更高效。
方案一:修正Selenium点击逻辑
用显式等待确保元素可点击后再操作:
from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By driver = webdriver.Edge() target_url = "https://www.meteoblue.com/en/weather/14-days/ottawa_canada_6094817" driver.get(target_url) # 显式等待Cookie弹窗并关闭 WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CLASS_NAME, "form-group"))).click() # 显式等待保存图片按钮,确认可点击后点击 save_button = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.CSS_SELECTOR, ".glyph.download")) ) save_button.click() # 可根据需求添加下载文件的后续处理逻辑
方案二:直接通过requests下载图片(推荐)
既然已经拿到了图片的直接下载链接,直接用requests库请求保存即可,无需操作浏览器:
import requests download_link = "http://my.meteoblue.com/visimage/meteogram_14day_hd?download=1&look=KILOMETER_PER_HOUR%2CCELSIUS%2CMILLIMETER&apikey=5838a18e295d&temperature=C&windspeed=kmh&precipitationamount=mm&winddirection=3char&city=Ottawa&iso2=ca&lat=45.4112&lon=-75.6981&asl=71&tz=America%2FToronto&lang=en&ts=1686662836&sig=171b0d835cf2ae17a032512cf41b1244" # 发送请求并保存图片 response = requests.get(download_link) with open("渥太华14天气象图.png", "wb") as img_file: img_file.write(response.content)
内容的提问来源于stack exchange,提问作者1324241421
相关产品推荐
相关产品推荐

