Selenium+Request实现一键下载王者荣耀所有皮肤原图脚本。
一、环境
1.Python版本:3.7.0
2.依赖:
selenium==4.9.0
requests==2.29.0
二、源码
import os
import re
import time
import traceback
import datetime
import requests
from selenium import webdriver
from selenium.webdriver.common.by import By
def sanitize_filename(filename):
# 使用正则表达式移除特殊字符
return re.sub(r'[\\/:*?"<>|]', "_", filename)
def get_driver():
option = webdriver.ChromeOptions()
option.add_experimental_option('excludeSwitches', ['enable-automation', 'enable-logging'])
driver = webdriver.Chrome("chromedriver.exe", options=option)
driver.implicitly_wait(20)
driver.maximize_window()
return driver
def download_hero_skins():
driver = get_driver()
# 打开皮肤官网
driver.get("https://pvp.qq.com/web201605/herolist.shtml")
# 获取英雄列表
hero_list = driver.find_elements(By.XPATH, "/html/body/div[3]/div/div/div[2]/div[2]/ul/li")
# 记录原始浏览器页面
original_window = driver.current_window_handle
for hero in hero_list:
hero_name = hero.find_element(By.XPATH, ".//a").text
hero_dir = os.path.join("hero_skins", hero_name)
os.makedirs(hero_dir, exist_ok=True)
# 点击打开英雄页面
hero.click()
time.sleep(2)
# 切换至英雄页面
for window_handle in driver.window_handles:
if window_handle != original_window:
driver.switch_to.window(window_handle)
break
# 获取皮肤列表
skin_list = driver.find_elements(By.XPATH, "/html/body/div[3]/div[1]/div/div/div[2]/ul/li")
for skin in skin_list:
skin_name = skin.find_element(By.XPATH, ".//p").text
skin_img_url = skin.find_element(By.XPATH, ".//i/img").get_attribute("data-imgname")
skin_img_name = f"{
hero_name}_{
skin_name}.jpg"
skin_img_name = sanitize_filename(skin_img_name)
skin_img_path = os.path.join(hero_dir, skin_img_name)
# 下载图片到指定文件夹
img_data = requests.get(f"https:{
skin_img_url}").content
with open(skin_img_path, "wb") as img_file:
img_file.write(img_data)
print(f"Downloaded: {
skin_img_path}.")
# 关闭英雄页面
driver.close()
# 切换回主页面
driver.switch_to.window(original_window)
time.sleep(2)
# 关闭浏览器
driver.quit()
print("finished.")
if __name__ == '__main__':
print(f"start at: {
datetime.datetime.now()}")
try:
download_hero_skins()
except Exception as e:
print(f"error {
e}:\n")
traceback.print_exc()
print(f"finish at: {
datetime.datetime.now()}")
三、原图
2023.9.16王者荣耀皮肤原画集合
链接:https://pan.baidu.com/s/14h_6nlg4jyok-MEdPRsH1A
提取码:4rjx