明日方舟Python挂机脚本

0.脚本说明

当前脚本版本:1.2.2

基于 Python 版本:3.8

功能包含:

  1. 三种模式刷关卡:模式1:自定义关卡(通常针对活动)。模式2:刷钱ce。模式3:刷经验ls。三种模式优先级从高到低
  2. 访问好友
  3. 收邮件
  4. 领取信用,自动买打折的商品
  5. 自动公开招募(自动选9小时,没有资深出现的情况下选第一个种类,有资深则停止自动招募,待手动操作)
  6. 处理会客室线索:上线索、足够后解锁线索、送多出2个的同种线索中一个、领新线索
  7. 领取任务奖励
  8. 基建收货,收信赖,傻瓜式换人
  9. 基建中使用无人机加速贸易站赚钱

每个功能可以自己配置是否开启,执行顺序,以及其重复运行的周期

主要目的省掉重复的日常工作,专注于 挑战/抄作业 哈哈哈

个人已经使用三个月左右运行基本没问题,可以连续多天一直挂机。

脚本逻辑代码都在文件夹下中,基本实现方式是 opencv 图像匹配 + adb控制点击滑动等操作

有问题可留言,我看到后回复

0.1 近期更新日志

时间版本更新内容
2023/11/301.3.0直接将截屏数据读为python cv2的img对象,跳过了硬盘的读写。增加脚本灵敏度,且更稳定,同时免去对硬盘的伤害
2022/5/311.2.2增加对CE-6与LS-6的配置支持
2022/5/31.2.1优化自定义关卡逻辑,增加对刷周年庆关卡的支持
2022/4/301.2.0加整体打包为exe的支持,配置由settings.py的python文件改为settings.txt
2022/4/261.1.2解决基建换人报错的bug
调整代码结构
加入 OCR 模块(同时换Python版本为3.8)
加入在公开招募时发现资深干员、高级资深干员则停止自动公开招募,等待未来手动操作的功能(其他挂机选项照旧运行)
2022/4/161.1.1解决明日方舟新版本调整UI后,刷关卡的bug
2022/4/131.1.0增加挂机功能:基建中使用无人机加速贸易站赚钱

1.下载

1.1 带EXE版本

由 Python 版本打包而来, 400M 左右,大部分都是 python 库文件占的体积,个人还没研究懂怎么缩小。

不过可以省去环境配置环节。

使用EXE版本的话看这篇:https://pangruitao.com/post/3893

1.2 Python版本

链接:https://pan.baidu.com/s/1DuQEGYvUYuM8TZ9e5-jhtg?pwd=wv2j
提取码:wv2j

仅 1M 左右,但需要配一下 Python 环境,会略麻烦一些,本文针对 Python 版本

2.配置准备

2.1 解压

解压至任意位置,内容大致如上

2.2 安装Python3.8

已装可忽略。3.8版本主要是为了用 easyocr 包。

运行目录下的 pre_1_install_python.bat

已安装 Python3.8 会进入 Python 控制台:

否则 win10 和 win11 下会自动打开微软商店对应 Python 页面:

如果没有安装,应该会有一个“获取”按钮(我已经装了),点击自动安装即可。

如果跳转的不是Python 3.8,则需要主动搜索一下。

2.3 安装库

脚本有用到 opencv 进行图像匹配,需要安装相关库。

双击运行 pre_2_install_packages.bat 。会自动安装相关库

下载可能比较慢,需等待一会,受不了就关掉重来,可能就快了。(如果有梯子速度应该没问题的)

下载安装的过程可能有些报错,一般可以忽略

2.4 夜神模拟器配置

建议使用夜神模拟器,其自带 adb 比较方便,且我测试时是用的夜神模拟器。

夜神官网:https://www.yeshen.com/

安装明日方舟,且登录至少一次。

再将模拟器的分辨率设置为 1280*720

运行脚本前,先保持模拟器的运行

3 脚本设置

用文本编辑器打开脚本路径下的 settings.txt

3.1 adb_path

由于脚本使用 adb 控制模拟器。需修改 adb 相关的配置:

使用夜神模拟器的话,可以直接在夜神安装路径下的 bin 文件夹下找到 adb.exe

将其路径修改进去就行(允许有空格和括号,但最好没中文,因为没测过)

注意保留双引号

3.2 device_address

Win+R 运行 cmd

cmd 命令行进到夜神 adb.exe 所在文件夹

(不熟悉 cmd 命令的话,也可以把夜神的 adb.exe 复制到 cmd 打开后的默认文件夹)

输入命令 adb.exe devices 查看各个设备的地址:

如果没有多开模拟器,应只会看到一个 127 开头的本地地址

把 IP带冒号加端口 一起复制到 settings.txt 中的 device_address

3.3 资源关卡配置

修改 settings.txt 中的

填自己账号能代理的对应关卡等级(我还只能打 4 )

3.4 功能开关和顺序配置(非必要)

注:自动公开招募功能当前仅 python 版可用,由于其有用到 easyocr,但打包成exe后运行会缺环境报错,我还没研究出来怎么处理。所以用 exe 的都加 #屏蔽掉

说明见注释,没有需求可以不动

3.5 刷自定义关卡配置方式(非必要)

这一步略麻烦,可以不配置,如果不配置会默认刷 CE 或 LS 关卡。建议在正常能跑通的情况下再来考虑自定义关卡配置。

原理说明:截一系列需要点击的地方的图,脚本会依次匹配并点击,以进到对应关卡的位置。

示例配置方式(周年庆活动)如下,将从点击“终端”后的终端主页:

到对应关卡的“开始行动”的页面(最后一步一定是”开始行动“的截图):

对每个页面需要点击的地方依次截图,用于脚本匹配图并点击截图的中心

建议用夜神模拟器自带的截图工具,保证分辨率一致:

如我想刷 SN-4 关卡,则流程上依次需要点击以下四个地方:

第一步
第二步
第三步(注意这种情况需要往上多截一些,使中心能够点击有效,但图片特征是 “SN-4” 也需要截到,否则可能和SN-5混淆)

注:暂时我没加滑动等额外操作的配置支持,所以像周年庆活动暂只能刷点击后默认打开的位置能看到的关卡。

第四步

注:如果可能出现默认非代理指挥的情况,这一步之前可以再加一步点击”代理指挥“(截没有勾选代理指挥时的”代理指挥“图)

把这几步依次需要点击的地方进行裁剪,裁剪可用 win 自带的裁剪工具,避免图片压缩失真:

并把截图后的图放在脚本下的某文件夹中,如:

由于图像匹配是逐像素的,截图时尽量使其特征最大化(如少截大片白、大片灰之类的无差异背景)

最后编辑 settings.txt

将图片的路径按格式依次加进去就ok,用逗号间隔,引号用半角。

可以试运行以下看看是否正常,如果某一步匹配失败,可以尝试调整那一步的图

3.6 其他配置(非必要)

还有一些其他配置,控制每个功能的循环周期,脚本的空闲时的等待时间等等,都有注释,可以根据需要自己调。

4 运行

可直接双击 run.bat 来运行

一切正常就能看到脚本在跑,且模拟器被控制运行了:

5.错误处理

5.1 CV相关报错

如果 run.bat 运行时 有 cv 相关的报错,代表依赖包安装有问题,及 2.3 的内容。

可尝试自己安装一下对应的包:

numpy
opencv-python
opencv-contrib-python

参考 opencv 文档:https://pypi.org/project/opencv-python/

其他解决方案参考 :opencv2安装报错no module named cv2

《明日方舟Python挂机脚本》有35条评论

    • 刚试了下,可以用,用文章3.5的配置方式,把到关卡上想点的地方依次截图(脚本点击截图的中心),这种把新”开始行动“也截一下。包”括使用代理“也可以截,没匹配上的图会自动跳过
      噢,还是有点问题,目前这样只能成功行动一次。
      晚些我调一下脚本。

      回复
    • 重新截图就可以了,把template_images里面的level4和level8自己改一下,关卡的图片按照作者的方法做就好了

      回复
      • 我分享下自己成功代理SN10(无限次)的截图,把原脚本里的文件替换就可以了
        链接:https://pan.baidu.com/s/1ssU24d4IEkFGppJOkRMN9w
        提取码:xltc

        回复
    • 我刚修改了脚本,重新下1.2.1版,可以刷变”开始行动“的活动了
      3.5的配置教程我也改了,参考着配一下就行,我自己跑了下没问题

      回复
    • 无人机那目前没写循环,但可以在 setting 中修改消耗无人机的执行周期,我目前设的2个小时消耗一次,基本能高于恢复速度的
      如果想更快消耗就可以把无人机周期(go_drone_cycle)设更低一些(可能需要同时降低 recheck_time_when_no_work_to_do)

      回复
  1. 额,还是厚着脸皮来求教了,换了新版本后运行就一直出现这个错误了,然后我尝试了好久也解决不了QAQ
    D:\Arknights_Scripts_EXE_1_2_1\Arknights_Scripts_EXE>python3.8 arknights_processor.py
    Traceback (most recent call last):
    File “arknights_processor.py”, line 8, in
    import image_processor
    File “D:\Arknights_Scripts_EXE_1_2_1\Arknights_Scripts_EXE\image_processor.py”, line 5, in
    import easyocr
    ModuleNotFoundError: No module named ‘easyocr’

    D:\Arknights_Scripts_EXE_1_2_1\Arknights_Scripts_EXE>pause

    回复
  2. #####################################################
    Finished read settings by settings.txt
    #####################################################
    ArknightsController: Check Work : go_level ,last_time = 0 , current_time = 1651731825.7136528 ,work_cycle = 10800
    #####################################################
    ArknightsController: Choose to do go_level ….
    #####################################################
    ArknightsController:Start to Restart ….
    ArknightsController:Stop the App ….
    ‘-s’ 不是内部或外部命令,也不是可运行的程序
    或批处理文件。
    ArknightsController:Start the App ….
    AdbController: Start to wait till match screenshot by any [‘template_images\\start0.png’] for up to 60 seconds ….
    ‘-s’ 不是内部或外部命令,也不是可运行的程序
    或批处理文件。
    ImageProcessor: start to match temp_screenshot\screenshot.png by template_images\start0.png
    Traceback (most recent call last):
    File “arknights_processor.py”, line 634, in
    re = restart_app()
    File “arknights_processor.py”, line 38, in restart_app
    start_app()
    File “arknights_processor.py”, line 17, in start_app
    re = adb_controller.wait_to_match_and_click([r”template_images\start0.png”],[0.01],True,60,2)
    File “C:\Users\Administrator\Desktop\Arknights_Scripts_EXE\adb_controller.py”, line 97, in wait_to_match_and_click
    re = wait_till_match_any(template_paths,thresholds,return_center,max_time,step_time,accidents,scope = scope,except_locs = except_locs)
    File “C:\Users\Administrator\Desktop\Arknights_Scripts_EXE\adb_controller.py”, line 80, in wait_till_match_any
    match_loc = image_processor.match_template(
    File “C:\Users\Administrator\Desktop\Arknights_Scripts_EXE\image_processor.py”, line 29, in match_template
    result = cv2.matchTemplate(target,template,cv2.TM_SQDIFF_NORMED)
    cv2.error: OpenCV(4.5.4) D:\a\opencv-python\opencv-python\opencv\modules\imgproc\src\templmatch.cpp:1164: error: (-215:Assertion failed) (depth == CV_8U || depth == CV_32F) && type == _templ.type() && _img.dims() <= 2 in function 'cv::matchTemplate'

    换了新版本,出现这种情况,请问怎么解决?

    回复
    • 像是settings.txt 里面 adb_path 配置的问题,txt配置要取消以前双引号外面的r,并且再检查一下路径看看有问题不
      #####################################################
      Start to read settings by settings.txt
      #####################################################
      set adb_path : D:\Program Files\Nox\bin\adb.exe
      set device_address : 127.0.0.1:62028
      append to_do_list : go_level
      append to_do_list : go_visit_friends

      我开头的 log 如上

      回复
  3. 请问作者还有之前版本的吗?5.3号更新后的老是出错,不是程序出错,是基建过关有时候按不到某个选项,卡一阵子之后就跳过了。老版本之前用没出现过这种问题

    回复

发表评论