Selenium+Requests实战:一键下载王者荣耀所有皮肤原图


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



至此教程结束,本文仅做技术分享,请遵守国家法律法规。
有错误或者改进的地方请各位积极指出!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值