我想要每天给桌面壁纸添加一张 xkcd 的漫画。于是我做了以下一系列事情,成功实现了功能。

编写 Python 脚本

使用爬虫获取 xkcd 漫画
xkcd 网站的结构比较简单,只需要在 HTML 中找出 comic 图像链接即可。使用代码如下:

url= 'https://xkcd.com/'

try:
    # 使用 requests 库获取网页r=requests.get(url)r.raise_for_status()r.encoding=r.apparent_encoding# 使用 bs4.BeautifulSoup 解析 HTMLsoup= BeautifulSoup(r.text, 'lxml')imgs=soup.find_all('img')

    # 在各个图片链接中找到 xkcd 漫画链接
    foriinimgs:src=str(i.get('src'))
        if '/comics/' insrc:
            ifsrc.startswith('//'):src= 'https:' +src# 获取并保存漫画图片imgfile=requests.get(src)imgfile.raise_for_status()
            withopen('./resources/xkcd.jpg', 'wb') asf:f.write(imgfile.content)f.close()
            print('Get xkcd image success')
            break
    else:
        raise Exception(f'No comic found in {url}')

# 出现异常时保存异常信息
except Exception ase:
    print('Get xkcd image fail')
    withopen(f'crash.log', 'a') asf:
        # current_date = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        print(f'[{current_date}]:',e,file=f)f.close()

使用 PIL 图像处理库编辑壁纸

也可以用其他的图像处理库,如 OpenCV

# Open backgroundwallpaper= Image.open('./resources/background.jpg')

# Open xkcd imagexkcd= Image.open('./resources/xkcd.jpg')wallpaper_xkcd=xkcd.resize((2 *xkcd.width, 2 *xkcd.height)).convert('RGB')
# 我这里设置将 xkcd 漫画放到壁纸右上角wallpaper.paste(wallpaper_xkcd,box=(wallpaper.width* 15 // 16 - wallpaper_xkcd.width, wallpaper.height // 16))

# Save to wallpaper
withopen('./wallpaper.jpg', 'wb') asf:wallpaper.save(f)f.close()

使用 Windows API 更换壁纸

要找到需要的 Windows API 对我来说是一件困难的事情,我这里求助了文心一言。也可以用 ChatGPT

win32gui.SystemParametersInfo(win32con.SPI_SETDESKWALLPAPER,os.path.join(script_path, 'wallpaper.jpg'))

预览效果如下图,可以看到壁纸右上角添加了一张 xkcd 漫画。

 

1.webp

 

将脚本添加到 Windows 任务

程序设置完成后,要想定时执行,还需要添加到 Windows 任务。
使用 Windows 的搜索功能(快捷键:Windows+Q)找到 “任务计划程序”。点击右侧 “操作” 中的 “创建任务” 进行设置。具体设置方法见参考资料中的 “windows 定时运行 exe 文件”。

2.webp

 

设置触发器

一定要设置触发器,否则任务不知道应该在什么时间执行。我设置为每天 23:00 执行。

3.webp

发表评论