大家好,我是10年码农大兵,目前是一位RPA定制开发者,计划帮忙开发并开源20个RPA机器人项目,如果您有rpa或相关自动化开发需求,欢迎发私信和我交流。
本次开源的RPA项目是:小红书养号、自动关注机器人
需求描述
使用影刀RPA模拟人工在小红书手机app上进行查看推荐的文章或视频,去关注内容中有包含双向奔赴、秒回关、必回等关键字的博主来实现涨粉。全程可24小时自动操作,解放双手
开发环境:
软件:
影刀ShadowBot-5.20.22-x64.exe
设备:
小米手机note3
手机app:
手机小红书8.23.1
功能实现:
影刀新增应用
选择手机自动化
新建python模块
复制以下的源码到新建的python模块module1.py文件中
# 使用提醒:
# 1. xbot包提供软件自动化、数据表格、Excel、日志、AI等功能
# 2. package包提供访问当前应用数据的功能,如获取元素、访问全局变量、获取资源文件等功能
# 3. 当此模块作为流程独立运行时执行main函数
# 4. 可视化流程中可以通过"调用模块"的指令使用此模块
import xbot
from xbot import print, sleep
from .import package
from .package import variables as glv
from xbot.mobile import appium
from xbot import excel
from datetime import datetime
import random
import os
def contains_any_keyword(s, keywords):
for keyword in keywords:
if keyword in s:
return True
return False
def viewBook(session):
print("查看笔记")
sleep(2)
#上拉
session.swipe(500, 1200, 500, 400)
wait_time = random.randint(3, 8)
print(f"等待{wait_time}秒")
sleep(wait_time)
#关注按钮
try:
element = session.find_by_id("com.xingin.xhs:id/followTV")
except Exception as e:
print("没有关注按钮")
session.back()
return
gzbtn = element.get_text()
if(gzbtn == "已关注"):
print("已关注")
session.back()
return
randInt = random.randint(1,3)
if(randInt == 3):
element2 = session.find_by_id("com.xingin.xhs:id/e63")
username = element2.get_attribute("content-desc")
print("关注"+username)
element.click()
global gzNum
gzNum = gzNum + 1
print(f"已关注 {gzNum}")
sleep(1)
session.back()
def readLog(filepath):
number = 0
# 检查文件是否存在
if not os.path.exists(filepath):
# 如果文件不存在,则创建文件并写入0
with open(filepath, "w") as file:
file.write("0")
else:
# 如果文件存在,则读取文件中的整数,将其设置为100,并写回文件
with open(filepath, "r") as file:
number_str = file.read().strip() # 读取内容并去除前后空白
try:
number = int(number_str) # 尝试将字符串转换为整数
except ValueError:
new_number = 0
return number
def writeLog(filepath,number):
with open(filepath, "w") as file:
file.write(str(number))
#今日已经关注人数
gzNum = 0
#最多关注人数
maxGZNum = 100
def main(args):
logpath = "C:\\小红书日志"
current_date = datetime.now().strftime("%Y-%m-%d")
filename = f"{current_date}.txt"
filepath = os.path.join(logpath, filename)
if not os.path.exists(logpath):
os.makedirs(logpath)
print(f"创建了目录: {logpath}")
global gzNum
#今日已经关注人数
gzNum = readLog(filepath)
#最多关注人数
maxGZNum = 100
if(gzNum >= maxGZNum):
print("今日已经关注人数达到最大值,退出程序")
exit()
session = appium.connect_by_custom_name('Mi Note 3')
session.open_app("com.xingin.xhs")
sleep(1)
while(True):
#点击首页
print("刷新首页")
elements = session.find_all_by_id("com.xingin.xhs:id/i5o")
element = elements[0]
element.click()
sleep(1)
keywords = ["新人", "奔赴", "双向", "养号", "回关", "秒回", "互助", "关注"]
maxlen = 3
for t in range(maxlen):
elements = session.find_all_by_xpath('/hierarchy/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/androidx.drawerlayout.widget.DrawerLayout/android.widget.LinearLayout/android.widget.RelativeLayout/androidx.viewpager.widget.ViewPager/android.view.ViewGroup/android.widget.FrameLayout/androidx.viewpager.widget.ViewPager/android.view.ViewGroup/android.view.ViewGroup/androidx.viewpager.widget.ViewPager/android.widget.FrameLayout/android.view.ViewGroup/androidx.recyclerview.widget.RecyclerView/android.widget.FrameLayout')
for i in range(len(elements)):
element = elements[i]
content = element.get_attribute("content-desc")
if(content.startswith("笔记") == False):
continue
if(contains_any_keyword(content, keywords)==False):
continue
print(content)
element.click()
sleep(2)
viewBook(session)
writeLog(filepath,gzNum)
if(gzNum>= maxGZNum):
print("今日已经关注人数达到最大值,退出程序")
exit
sleep(2)
#上拉
session.swipe(500, 1200, 500, 400)
电脑连接手机,修改相关源码的日志路径、当日最多关注人数及要连接的手机设备名称,点击运行