1

目 标 场 景

最近,有一个朋友告诉我,她在某平台上购买了一部手机,收到货之后发现商品质量挺好的,价格也不贵。

临了随手给了个好评,商家最后还给她发一个 小红包,她把这个商品分享给了我。

本篇文章的目的是利用Python 自动化完成商品购买的操作。

ps:本文仅限用于技术交流,请勿用于其他用途。

2

准 备 工 作

在编写代码之前,需要做如下准备工作:

1、配置好 Android ADB 开发环境

2、Python 虚拟环境内安装 pocoui 依赖库

3、操作剪切板的应用 APK,下载链接见文末

3

编 写 代 码

我们分7 个步骤来实现这个功能,分别是:打开目标应用客户端、搜索关键字到商品列表界面、裁剪原图拿到商品主图、商品匹配、商品收藏和浏览、购买商品、获取订单号和截图。

第1步,使用 Airtest 自动化打开目标应用。# 目标应用

package_name = '应用包名'

activity = 'Home Activity'

def __pre(self):

"""

准备工作

:return:

"""

# 删除缓存文件

remove_cache('./part.jpg', './screenshot.png', './uidump.xml')

home()

stop_app(package_name)

start_my_app(package_name, activity)

打开应用之后,就可以进行第2步操作了。

通过预先得到的关键字,置入到输入框中,然后点击搜索按钮,一直等待搜过列表出现为止。

需要注意的是,有些控件元素需要点击多次才能算一次有效的点击事件。def __search_good_by_key(self):

"""

通过关键字搜索商品

:return:

"""

self.poco(id_page_main_button_search).wait(5).click()

perform_view_input(self.poco, id_page_search_edittext_search, self.key)

# 点击搜索

self.poco(id_page_search_button_search).wait_for_appearance()

while self.poco(id_page_search_button_search).exists():

print('点击一次搜索')

perform_view_id_click(self.poco, id_page_search_button_search)

# 等待列表加载出来

self.poco(id_page_goods_rv).wait_for_appearance()

第 3步,剪切原图,需要对原图中多余的白色区域进行删除,只保留左侧的商品主图。

通过 遍历 x 轴、y 轴,拿到每一个像素的颜色值,如果是连续的白色就做一个标识,进而拿到主图的上、下、左、右坐标值,最后利用 cv2 库进行裁剪,得到商品主图。def crop_main_img(img_path):

"""

获取商品主图

:return:

"""

img = cv2.imread(img_path)

# 图片大小(高、宽、the pixels value is made up of three primary colors)

size = img.shape

img_height = size[0]

img_width = size[1]

channels = size[2]

# 1080*458

print(f'图片宽度:{img_width},高度:{img_height}'

# 标识数组,针对x轴和y轴

arr_x = []

arr_y = []

# 遍历宽,得到主图的x轴坐标

for x in range(img_width):

is_black = True

# 遍历高

for y in range(img_height):

# 获取颜色值

color_position = img[y, x]

if (color_position == color_white).all():

pass

else:

is_black = False

arr_x.append(is_black)

# 遍历高,得到主图的y轴坐标

for y in range(img_height):

is_black = True

# 遍历高

for x in range(img_width):

# 获取颜色值

color_position = img[y, x]

if (color_position == color_white).all():

pass

else:

is_black = False

arr_y.append(is_black)

position_x = get_space_index(arr_x)

position_y = get_space_index(arr_y)

main_img_path = "./head_img.jpeg"

# 剪切

# 裁剪坐标为[y0:y1, x0:x1]

cropped = img[position_y[0]:position_y[1], position_x[0]: position_x[1]]

cv2.imwrite(main_img_path, cropped)

return main_img_path

第4步,商品匹配。

拿到商品主图之后,利用 Airtest 在当前页面进行元素查找,如果没有找到,就滑到下一个元素;否则,就拿到匹配商品的坐标。def __search_good_from_list(self):

"""

从列表中匹配商品

:return:

"""

# 循环的图片查找

while True:

try:

pos = loop_find(Template(self.main_img_path), timeout=10, threshold=0.95)

except TargetNotFoundError:

print('滑动一页')

self.__swipe(True)

else:

print('找到了')

# 屏幕宽度和高度

screen_size = self.poco.get_screen_size()

print(screen_size)

# 点击的坐标点(宽、高)

# (0.22407407407407406, 0.8550925925925926)

position_click = (pos[0] / screen_size[0], pos[1] / screen_size[1])

print(position_click)

self.poco.click(position_click)

break

第5步,商品收藏和浏览。

跳转到商品信息界面之后,先收藏商品,然后跳转到商品详情页面和评论页面。

在预先设置的浏览时间内,执行休眠、滑动操作。def __browser_good_detail(self):

"""

浏览商品

:return:

"""

# 切换到详情Tab

self.poco('com.**:id/taodetail_nav_bar_tab_text', text='详情').click()

# 滑动时长为: self.browser_detail_time

browser_start = datetime.datetime.now()

browser_end = browser_start

while (browser_end - browser_start).seconds < self.browser_detail_time:

# 休眠一会

time.sleep(random.randint(2, 5))

# 滑动一次

self.__swipe(True)

# 结束时间

browser_end = datetime.datetime.now()

print('详情页面查看完毕')

第6步,购买商品。

商品的购买操作很简单,只要点击一个购买按钮即可完成;基于安全考虑,这里选择收货地址、输入支付密码手动输入。def __buy_good(self):

"""

购买商品

:return:

"""

# 立即购买

self.poco('**/detail_main_sys_button', text='立即购买').click()

# 选择商品属性

sleep(10)

# 确定购买

self.poco('**/confirm_text', text='确定').parent().click()

# 提交订单

self.poco(text='提交订单').click()

# 手动输入密码或者指纹

sleep(10)

第7 步,获取订单 ID 及商品截图。

通过 Monitor 观察发现,订单号文本元素很难通过属性或者子、父关系拿到。

可以通过点击复制按钮,将订单号粘贴到系统的剪切板,然后利用 adb + clipper 这款 App拿到剪切板中的内容。def __get_order_no(self):

"""

获取订单编号

:return:

"""

global copy_element

while True:

# 由于手机屏幕的限制,【复制】按钮第一页不一定能显示出来

try:

copy_element = self.poco(text='复制')

except Exception as e:

print('没有找到元素,往下滑动一页')

self.__swipe(True)

break

# 复制到剪切版本

copy_element.click()

# 从剪切板拿到数据

result = exec_cmd('adb shell am broadcast -a clipper.get')[1]

# 匹配出订单号

result = re.findall(r'data="(.*)"', result)

order_no = ''

if result and len(result) > 0:

order_no = result[0]

print(order_no)

return order_no

接着利用 adb 命令截取当前屏幕,然后保存到 PC 端,即完成了全部操作。def get_order_pic(self):

"""

拿到订单截图界面

:return:

"""

screenshot_pic_result = './order_screenshot.png'

# 截取手机当前屏幕

exec_cmd('adb shell /system/bin/screencap -p /sdcard/screenshot.png')

# 保存到PC端

exec_cmd('adb pull /sdcard/screenshot.png %s' % screenshot_pic_result)

return screenshot_pic_result

4

结 果 结 论

通过以上的步骤,即可以完成自动化挑选商品、浏览、购买等一系列操作。

需要补充的是,由于手机分辨率的不一致,导致商品主图匹配会存在一定的误差;但由于主图宽、高比是一致的,可以通过缩放图片达到 适配的目的。

python自动化赚钱-薅羊毛 | Python 自动化带你轻松赚钱(完结版)相关推荐

  1. 新农慕课python项目_薅羊毛的神器Python介绍给你,低调使用

    球鞋那么难抢,有没有抢限量版球鞋的神器? 每当限量版球鞋开售的时候,几十万人一拥而入,能抽中的却是少数. 朋友圈刷到别人中标的消息,心里又羡慕又有点酸......这种时候只能去找黄牛了. 黄牛党都是靠 ...

  2. 薅羊毛 | Python 自动化带你轻松赚钱

    作者:星安果 来源:AirPython 阅读文本大概需要 10 分钟. 1 目 标 场 景 最近,有一个朋友告诉我,她在某平台上购买了一部手机,收到货之后发现商品质量挺好的,价格也不贵. 临了随手给了 ...

  3. 薅羊毛 | Python 自动化带你轻松赚钱(完结版)

    阅读文本大概需要 10 分钟. 1.目 标 场 景 最近,有一个朋友告诉我,她在某平台上购买了一部手机,收到货之后发现商品质量挺好的,价格也不贵. 临了随手给了个好评,商家最后还给她发一个 小红包,她 ...

  4. Python 自动化带你轻松赚钱

    目 标 场 景 最近,有一个朋友告诉我,她在某平台上购买了一部手机,收到货之后发现商品质量挺好的,价格也不贵. 临了随手给了个好评,商家最后还给她发一个 小红包,她把这个商品分享给了我. 本篇文章的目 ...

  5. 薅羊毛 | Python 带你抢视频红包,不放过一个红包!

    阅读文本大概需要 15 分钟. 1 目 标 场 景 如今短视频横行的时代,以某短视频为首的,背后依靠着强大的资金后盾,疯狂地对平台用户进行红包轰炸. 与传统的红包不一样,视频红包包含位置的不确定性.大 ...

  6. python刷视频薅羊毛攻略一

    步骤 1.电脑安装python 2.电脑安装adb,adb是Android 开发/测试人员不可替代的强大工具,安装包 提取码: 924j 3.打开手机开发者模式,然后打开USB调试,数据线连接电脑 4 ...

  7. 推荐一位玩自动化、爬虫的 Python 硬核爱好者

    今天给大家推荐一位 Python 类的公众号「AirPython」,作者:星安果,果哥有 7 年的编程学习经验,热爱 Python 爬虫.自动化实战.软件测试.Web.数据分析及软件测试,平时喜欢分享 ...

  8. Python薅羊毛脚本

    现如今手机自动化脚本,都是auto.js的天下.这哪里行,自动化哪能少的了Python,作为Python的拥趸,得为它做些贡献,给Python争口气. 我用uiautomator2和pysimple开 ...

  9. 来来来,教你如何智慧薅羊毛!

    提到边缘计算,熟悉ToB技术的朋友,首先可能想到的就是运营商的5G MEC(移动边缘计算),以及云计算中的融合边缘系统理念. 的确,作为全球公认的创新技术趋势,边缘计算如今已经被广泛用于云计算.5G. ...

最新文章

  1. java环境变量设置
  2. java和python哪个好学-Python和Java,哪个容易学呢?
  3. 二十二、linux定时器
  4. Musical Theme pku1743 (后缀数组)
  5. GIT学习(二)--Git分布式的好处
  6. js判断html存不存在某个属性,javascript如何判断对象是否存在某属性?
  7. 【Android开发】jarsigner重新打包apk
  8. 【opencv+C++】在图像中找四边形
  9. 日企抛等离子淘汰论 专家称其不敌中国企业
  10. 学UI设计出来可以从事什么工作?
  11. word与mathtype——“运行时错误48,文件未找到:MathPage.wll”解决
  12. GoldenGate的安全配置
  13. 人工智能 识别医疗票据、医疗结算清单 OCR识别技术
  14. 论文阅读 Solving Mixed Integer Programs Using Neural Networks
  15. liquibase(数据库管理)
  16. 上交计算机考研专业课,2018上交考研经验贴
  17. KDD 2022 | 量化交易相关论文(附论文链接)
  18. 使用CGLIB enhancer实现类的增强
  19. MySQL:count(*) count(字段) 实现上区别
  20. 【海岛吉他7】吉他琴弦间音程度数关系

热门文章

  1. 六个计算机硬件商标名称,10nm显卡可能有名字了,Intel悄悄申请全新商标!
  2. 基于stm32的模拟楼道光控开关的实验
  3. python 播放本地音乐_python本地音乐播放器
  4. Hadoop实战——MapReduce对英文单词文本进行统计和排序(超详细教学,算法分析)
  5. 排队叫号机控制系统与自助查询终端系统解决方案
  6. MSCKF(一)——四元数的两种表示
  7. 读书笔记-偷影子的人
  8. 郭炜老师 程序设计与算法(二) 枚举
  9. 《RFID原理及应用》期末复习总结(1)
  10. GPL协议允许你怎么卖?