这个的基础是你已经了解这个项目了,如果还不了解,看看这个攻略:
https://btcover.com/index.php/2022/04/17/xiangrikuileyuansunflower-landzhongwenxinshougonglue/
了解大概,注册好帐号,你手动操作几次流程就会发现,这手动刷有点累,而且按照向日葵的生长速度,1分钟一收获,你基本上就坐在电脑前走不开了,同时这个收益还不确定,那这么花时间投入就有点不合适了,自然就想到使用 Python 的自动化脚本来试试。
基础
- Python 基础,不用掌握太多,新人恰好可以通过这个来学 Python,没基础的可以看看这个安装教程:https://btcover.com/index.php/2022/04/17/zuikuaijiefangbiandefangshianzhuang-python-anaconda/
- Sunflower Land 账号,最好你已经手动操作过了
准备
在你安装好Python环境后,你就可以来装几个主要的包了。
安装包: pyautoGUI
pip install pyautogui
这个包是用来操作鼠标移动、点击、以及识别图片的。
安装包:opencv
pip install opencv-contrib-python
还有一个辅助的包,是用来调整识别图片的准确度,需要在装一下这个包,如果不装,也可以。
流程
1. 先买400个种子
我设计的路线,不能说全自动,因为项目方设计了很多障碍给自动化操作,比如一次最多买400个种子,再要增加,需要同步一下 Polygon 链,因为 400 个种子也够种一段时间了,那我们就第一步,手动先买 400 个,你在开始的时候没那么多钱,那就尽量买到最多,慢慢滚雪球。
2. 循环种植每个种子
这里就是利用 pyautogui.click(x座标,y座标,点击左键,鼠标运动间隔)
这段代码。
它本身是一个点击的操作,但是参数里面指定了点击位置、点击左键、移动的时间,你就会看到鼠标自动运行又点击。
位置怎么获取呢?用这段代码就可以:
import pyautogui
# 判断鼠标位置
currentMouseX, currentMouseY = pyautogui.position()
print('X: ' + str(currentMouseX))
print('Y: ' + str(currentMouseY))
这个也是你用来找一个又一个洞的常用方法,要熟悉。
你就可以这样一步步种植,循环每个洞的方法就是 for
循环每个座标即可。
种植好了,就设置一个睡眠 60 秒,等待成熟。然后再同样的用pyautogui.click(x座标,y座标,点击左键,鼠标运动间隔)
进行收获,在收获的同时你多点一下,就再种植上了。理想情况下,你就又完成了种植。
3. 遇到报错1:宝箱
但项目方设置的障碍来了,它有个宝箱机制,

其实就是一个验证码,箱子位置每次都在变,好在我们可以利用 pyautogui
里面的相似图片识别来做,

因为每次都会出现一个宝箱,而且我就是要点击它,就先找到它的位置,代码如下:
在每次收获完之后,都做一次这个检查,检查到了就开宝箱,开完继续收获即可。
4. 遇到报错2:错误链接
项目方还有个随机的机制,如果它判断你是机器人了,就给你全屏暂停,弹出一个提醒,这时候只能刷新界面,好在弹出框里的小姑娘是固定的,

我们可以也设置一个同样的图片检查,检查到了就刷新浏览器即可。
至此,这套自动刷的流程就结束了。
完整代码
有些时间间隔,我做了一些细节调整,是我自己测试出来的,用起来整体的容错率很高。也算是抛砖引玉,有好的的建议欢迎留言。
import pyautogui
import time
# 切换到浏览器
def bring2front(x,y):
pyautogui.click(x,y,button='left',duration=0.5)
pyautogui.click()
# 查看是否出问题了
def check_error():
# print('查看是否出问题了')
error = pyautogui.locateOnScreen('Girl.png',region=(1425, 975, 1000, 475), grayscale=True, confidence=0.5)
if error:
pyautogui.click(86,85,button='left',duration=0.5)
time.sleep(15)
pyautogui.click(983,597,button='left',duration=0.5)
time.sleep(10)
# 收割第一颗向日葵
def harvest(x,y):
pyautogui.click(x, y, button='left',duration=0.5)
pyautogui.click()
# 需要寻找到宝箱到位置
Part = pyautogui.locateOnScreen('Part.png', region=(1425, 975, 1000, 475), grayscale=True, confidence=0.5)
# 在附属屏幕上,除以2才可以
if Part:
pyautogui.click(pyautogui.center(Part).x/2,pyautogui.center(Part).y/2, button='left',duration=0.5)
# 点击 Close
pyautogui.click(963, 689, button='left',duration=0.5)
# 点击商店
def shop():
pyautogui.click(1864, 825, button='left',duration=0.5)
# 点击卖出
pyautogui.click(861, 449, button='left',duration=0.5)
# 点击卖一个,全部卖出
pyautogui.click(1100, 736, button='left',duration=0.5)
pyautogui.click(877, 637, button='left',duration=0.5)
# 点击买入
pyautogui.click(763, 452, button='left',duration=0.5)
# 点击买一个
pyautogui.click(1064, 709, button='left',duration=0.5)
for j in range(4):
pyautogui.click(duration=0.5)
# 关闭
pyautogui.click(1185, 451, button='left',duration=0.5)
# 点击种植
def plant(x,y):
pyautogui.click(x, y, button='left',duration=0.5)
if __name__ == '__main__':
# 地的坐标列表
earth_list = [(1000, 418),
(1085, 413),
(1042, 453),
(1000, 495),
(1085, 495)]
# 向日葵1
x1, y1 = (1000, 418)
bring2front(x1, y1)
for i in range(60):
check_error()
for positon in earth_list:
x, y = positon
plant(x, y)
# check_error()
j = 0
while j < 24:
check_error()
time.sleep(1)
j += 1
for positon in earth_list:
x, y = positon
harvest(x, y)
check_error()
# shop()
来自 DFarm
如果你对币圈技术感兴趣,尤其是撸毛的技术,欢迎加入 DFarm 伟哥的 Discord 群:
本文由BTCover原创,https://btcover.com首发,如若转载,请注明出处https://btcover.com/index.php/2022/04/17/gamefi-zidonghuajiaochengzhi-sunflower-landshoubashoujiaohuiniruhezidongshuaxiangrikui/。