SteamVR

SteamVR

38 ratings
如何快速地生成一份全成就指南
By kaikisen
这是一个基于python+selenium的简单小脚本,思路是先从steam成就界面爬取成就图片和信息,然后用selenium操控浏览器进行循环编辑,可以很方便地生成一份成就指南。
   
Award
Favorite
Favorited
Unfavorite
这个玩意儿到底是干嘛的
此屎山可以追溯到大半年前首发玩Death of the Reprobate的时候心血来潮想写成就指南,但是又觉得一条条创建条目、导入图片、编辑成就名和说明实在是好——麻烦!于是就想着一劳永逸整一个自动化工具解决这个问题。

脚本的运行情况如下:













(这个gif没有加速

如果你好奇这个工具生成的模板效果,可以参考以下几篇指南,其框架都是我用这个小脚本自动生成的。

https://steamhost.cn/steamcommunity_com/sharedfiles/filedetails/?id=3363914853
https://steamhost.cn/steamcommunity_com/sharedfiles/filedetails/?id=3439520291
https://steamhost.cn/steamcommunity_com/sharedfiles/filedetails/?id=3460894332
https://steamhost.cn/steamcommunity_com/sharedfiles/filedetails/?id=3502332697

本项目完全允许二传二改,如果你对python、steam格式和html样式有一定了解,也可以尝试一下制作成更贴你心意、更适合你自己风格的脚本。
下载
由于被steam口球塞怕了就不放链接了请直接在github搜索:

Steam-achievement-guide-template-generator

唯一的结果应该就是这个小项目了
使用
本脚本是完全基于python的,没有python基础的友友请谨慎使用。
本脚本全程需要梯子,没有梯子或不稳定的友友请谨慎使用。
本脚本基于edge浏览器,没有edge浏览器的友友…
不好意思浪费你时间了我给你磕一个呜呜呜呜

下载完成后,本脚本分为两个部分,①获取成就信息和图片的脚本②操作浏览器的自动化脚本

0.安装requirement.txt中的库;

1.运行InfoWithPic.py,输入游戏的appid并回车,同文件夹下应该就会出现存放成就图片的achievement_images和achievements.csv了;

2.创建一份指南,编辑好基本信息,在“指南内容”界面并上传achievement_images里的所有成就图片(似乎只有在浏览器编辑才能够批量上传?辣鸡steam又一力证);复制“指南内容”界面的链接,其末端应该以“manageguide/?id=xxxxxxxxxx”结尾;

3.打开edge浏览器,登录steam并打开你刚刚新建的指南链接,确保你能够在edge上访问这个界面;

4.编辑GuideGenerate.py:
  • 将【file_path = r'此处替换achievements.csv的文件路径' 】一行中的路径改为刚刚生成的achievements.csv的文件路径
  • 将【user_data_dir = r"C:\Users\{你的用户名}\AppData\Local\Microsoft\Edge\User Data"】一行中的值改为你的edge用户数据文件夹(用于带有缓存状态打开浏览器),这个值只需要在首次使用时编辑一次
  • 将【driver.get("https://steamhost.cn/steamcommunity_com/sharedfiles/manageguide/?id=你的指南链接")】中的值替换为你刚刚创建的指南链接,其末端应该以“manageguide/?id=xxxxxxxxxx”结尾。

5.关闭并退出所有的edge界面关闭并退出所有的edge界面关闭并退出所有的edge界面,并运行GuideGenerate.py——如果一切顺利,你应该可以看到成就条目在以惊人的速度自动生成了。
碎碎念
我最初版本是用selenium操控chrome运行的,倒是能跑但是chrome的版本变化真是太神秘莫测了,三天两头驱动和内核对不上就要报错,每次都要打一堆option补丁,直到今天为止——是无论如何也运行不了了!搜尽办法拼尽全力最终也无法战胜…

然后我又灵机一动想到,既然是网页操作,那为什么不直接用js脚本来编辑呢?于是就又花了时间用极业余的水平把屎山用js重构成了油猴脚本——结果由于steam指南编辑需要频繁的网页跳转,额外引入的状态记忆不说,用户操作逻辑、加载缓冲时间、html元素判定顺序…各个方面都有问题(最神秘的是每次循环应该根据flag状态增加一个条目,但实际运行时从条目编辑页回到管理页无论如何都会生成两遍——我把头撞破了都想不通这个bug究竟是出在哪里啊啊啊啊啊啊)

折磨了一天毫无进展,怒把这两个路数全弃了改成用edge来操作——结果丝滑流畅得不知天地为何物了!(当然友友们运行的时候可能还是会有bug…我努力帮忙调试…调试…)

所谓代码五分钟调试两小时,这个屎山调试的部分真的是占了百分之九十五以上的时间,太折磨了……真正的指南编辑功能部分倒是很顺利写完了(本来只是当做html元素定位的练手小项目为什么最终会变成这样的屎山…)
7 Comments
FatedyZ 26 Jun @ 9:33am 
https://steamhost.cn/steamcommunity_com/sharedfiles/filedetails/?id=1245720477
我在想这个指南里的外链插入图片方法是否可以,就是需要找到一个有完整成就描述和合适的图片外链,目前看只有SteamDB,但是这里的图片插不进去,好像是图片的路径太长了,不能识别
kaikisen  [author] 26 Jun @ 9:25am 
@FatedyZ 可以的!不设章节的话反而简单了~只要生成一个table的话也许不用selenium操控了,感觉直接按爬取的成就信息生成table之后、复制过来就够了?

插入图片真是一个大难题…steam的编辑逻辑做的太差了,我想过做一个拖放上传的油猴但感觉还是操作起来还是绕远路。成就图片按这个指南批量上传还算方便,但其他图片上传的格式排版真的很折磨…除了搓一个新编辑器出来之外想不到什么好办法!:KrilEvil:

总之能帮到你就好~祝写的顺利!
FatedyZ 26 Jun @ 9:13am 
格式差不多是这样的
[table]
[tr]
[td]图片[/td]
[td]英文成就描述[/td]
[td]中文成就描述[/td]
[/tr]
[/table]

有空我研究一下你的源码运行看看
FatedyZ 26 Jun @ 9:11am 
因为我经常写指南,看到这个感觉很有用, https://steamhost.cn/steamcommunity_com/sharedfiles/filedetails/?id=3441154004 我想要快速生成全指南里的全成就预览格式的样子,不知道能否实现,然后我觉得如果可以直接插入外链图片的话,是否编辑的时候直接以[img]{图片链接}[/img]的格式插入指南,都不需要上传图片了,目前我尝试用过SteamDB的成就图片插入,但是不成功,目前搜索到外网的插入方法是先上传到imgur这种免费的图片上传网站,然后再用[img]{图片链接}[/img]的形式插入,可以省略上传图片的步骤。
kaikisen  [author] 18 Jun @ 7:58pm 
@Chie 好快的用!

我第一次用pipreqs来列依赖库来着,仔细一看怎么同一个库不同版本的都列进去了…可能是装了低版本后检测到版本不够所以需要额外更新一次?我等会改一下

带其他截图不影响的!因为是上传之后右侧图片框里的html元素带文件名标签的,只要不和成就图片命名重复应该就没问题~

关于游戏截图和自定义图片插入——其实本来想做个js插件实现【将本地图片直接拖拽摆放插入到文章中】的效果(格式则按上一次放图的记录或额外弄个小panel来自定义),但经历了昨天的苦役目前对steam的网页充满了恐惧…
Chie 18 Jun @ 12:06pm 
populate图文这块很好地解决了 但对我来说上传图片(resize)和精修排版依然是最耗时的一步,有的图要靠左右的图要靠右。这里有个我个人遇到的引申的问题,就是一般来说,全成就指南是要带一些自己的额外游戏截图的,而不是一个成就icon+简短文字就能“指南”完毕的。不知道如果我这样加额外的内容图,代码还能不自动化?

不管怎样这个js方法是streamline指南生成的一大步了 great effort!
Chie 18 Jun @ 11:49am 
不知道是不是requirements.txt缺了包 我这边额外pip install了几个