Python 带你来一次说走就走的环球旅行

Souleigh ✨ 等级 490 0 0

Python 带你来一次说走就走的环球旅行

1、目 标 场 景

十一长假,相信大部分的朋友这会应该是在全国各地浪或者是在浪的路上,朋友圈成为你们表演的场所。

当然,也有一小戳朋友是选择家里蹲,你们是否感觉到无聊?是否想出去浪,参加朋友圈摄影比赛?

本篇文章的目的是利用 Python 带我们实现一次 说走就走的环球旅行,完胜这次的朋友圈摄影比赛。

2、准 备 工 作

在开始编写脚本之前,需要做如下准备工作:

1、一部 Root 后的 Android 手机

2、配置好 Android ADB 开发环境

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

4、虚拟定位应用 FackLocation

5、选好一个景点,下载对应景点的一些照片,并准备一段装逼的文字

3、编 写 代 码

一共分 6 个步骤来完成这次操作,分别是:通过位置拿到经度和纬度、开启虚拟定位服务、导入图片到手机相册、打开朋友圈、选择相册图片、编辑内容和选择地理位置、发布朋友圈。

首先,利用 adb 命令拿到 FackLocation 和微信的应用包名和 LaunchActivity。

adb shell dumpsys activity | grep -i run 

拿到应用包名和 LaunchActivity 之后,利用 AirtestMonitor 工具可以非常方便的打开 FackLocation 应用、添加地理位置。

Python 带你来一次说走就走的环球旅行

image

到达搜索界面之后,由于搜索的结果在 Monitor 下找不到。

Python 带你来一次说走就走的环球旅行

因此,这里借助开发者选项内的 指针位置,拿到列表第一项的坐标,利用 adb 执行点击操作,既可以完成选择经纬度的操作。

def __mock_location(self):
    """
    模拟定位
    :return:
    """
    home()
    stop_app(package_name_location)
    start_my_app(package_name_location, activity_location)

    # 点击添加位置
    self.poco('com.lerist.fakelocation:id/fab').click()

    # 点击搜索
    self.poco('com.lerist.fakelocation:id/m_item_search').click()

    # 输入框输入目的地
    self.poco('com.lerist.fakelocation:id/l_search_panel_et_input').set_text(self.location)

    sleep(2)

    # 宽、高
    size = self.poco.get_screen_size()

    # 由于选择结果UI树查找不到,这里使用坐标来执行点击操作
    adb_click(500, 283)

    # 确定位置
    while self.poco('com.lerist.fakelocation:id/a_map_btn_done').exists():
         self.poco('com.lerist.fakelocation:id/a_map_btn_done').click() 

2 步,通过元素文字内容来判断服务是否开启,如果没有开启,就通过一次点击操作,完成定位服务的开启。

def __start_mock(self):
    """
    开启模拟位置
    :return:
    """
    mock_element = self.poco('com.lerist.fakelocation:id/f_fakeloc_tv_service_switch')
    if mock_element.get_text() == '启动模拟':
         mock_element.click()
         # 等待启动模拟完成
         self.poco('com.lerist.fakelocation:id/f_fakeloc_tv_service_switch', text='停止模拟').wait_for_appearance()
    else:
         pass
    print('模拟已经开启') 

3 步,把 PC 端的图片利用 adb push 命令导入到 **手机相册目录 **下。

# 本地等待发送的图片
files = get_all_files('./image/')

# 一共待发送的图片数目
self.image_num = 9 if len(files) > 9 else len(files)

# 手机相册目录
phone_image_path = 'sdcard/DCIM/Camera/'

# 一张一张图片导入到手机相册内
for file in files[:self.image_num]:
    exec_cmd('adb push %s %s' % (file, phone_image_path)) 

需要注意的是,导入图片后需要再 发送一次刷新广播,相册中才能找到这些图片。

# 更新手机相册
exec_cmd('adb shell am broadcast -a android.intent.action.MEDIA_SCANNER_SCAN_FILE -d file:///%s' % phone_image_path) 

4 步,同样是利用 Airtest 打开微信客户端,然后自动化跳转到朋友圈界面。

def __open_friend_circle(self):
    """
    打开朋友圈
    :return:
    """
    # 等待完全打开微信App
    self.poco(text='微信').wait_for_appearance()
    self.poco(text='通讯录').wait_for_appearance()
    self.poco(text='发现').wait_for_appearance()
    self.poco(text='我').wait_for_appearance()

    print('微信完全打开')

    # 点击【发现】Tab
    self.poco('com.tencent.mm:id/djv', text='发现').parent().click()

    # 打开朋友圈
    self.poco('android:id/title', text='朋友圈').click()

    # 等待朋友圈动态加载完全
    self.poco('com.tencent.mm:id/eyx').wait_for_appearance() 

5 步,从手机相册内选择图片。

Python 带你来一次说走就走的环球旅行

手机相册的照片是按时间进行排序的,根据上面推送的图片数目,选择相册的前面的 **具体数目 **的照片即可。

# 选择指定数目的照片
cbs = self.poco('com.tencent.mm:id/ek8').offspring('com.tencent.mm:id/bwn')

index = 0

# 选中固定数目的照片
for cb in cbs:
    if index < self.image_num:
        cb.click()
    else:
        break
    index += 1

# 确认选择图片
self.poco('com.tencent.mm:id/lm').click() 

6 步,输入文字内容,并选择具体的位置。

Python 带你来一次说走就走的环球旅行

由于虚拟定位刷新的不及时,为了保证位置的准确性,连续进行两次定位

def __put_content_and_gps(self):
  """
  输入内容和定位
  :return:
  """
  # 输入朋友圈内容
  self.poco('com.tencent.mm:id/d3k').set_text(self.msg)

  # 定位的次数,一般需要两次
  location_count = 0

  # 点击定位图标
  while True:

      self.poco('com.tencent.mm:id/d0a', text='所在位置').click()

      # 等待搜索列表中有结果出现
      self.poco('com.tencent.mm:id/du7').wait_for_appearance()

      if location_count == 0:
           # 返回
           keyevent('BACK')
           location_count += 1
      else:
           # 排除ListView的前两项(不显示、市区),直接点击第三项(具体位置)
           self.poco('com.tencent.mm:id/dul').children()[2].click()
           break 

7 步,拿到顶部的发布按钮,就可以 一键发布动态了。

比如,我在深圳就发了一条在北京 TAM 看 YB 的朋友圈。

Python 带你来一次说走就走的环球旅行

4、结 果 结 论

跟着上面的操作,就能实现全国任意一个景点,随时随地去玩这一骚操作。

如果你觉得文章还不错,请大家点赞分享下。你的肯定是我最大的鼓励和支持。

收藏
评论区

相关推荐

15. Python 程序运行速度如何提高十倍?第一遍滚雪球学 Python 收工
本篇文章将给大家介绍 Python 多线程与多进程相关知识,学习完该知识点之后,你的 Python 程序将进入另一个高峰。 <center<font colorred缓解一下视疲劳</font</center 15. Python 程序运行速度如何提高十倍?第一遍滚雪球学 Python 收工(https://imghelloworld.oss
python算法
640?wx_fmtjpeg(https://imghelloworld.osscnbeijing.aliyuncs.com/c8238ed70f9664b61ce91f80786ca26f.png) 来源 | CSDN(ID:CSDNnews ) 本文是一些机器人算法(特别是自动导航算法)的Python代码合集。 其主要特点有以下
原来Python绘图也可以这么漂亮,这次真的是学习到了!
(https://imghelloworld.osscnbeijing.aliyuncs.com/8830803f033eeed85783e9058cf08968.png) 作者:朱小五 来源:快学Python 👆人生苦短,快学Python! 最近看了一篇文章《一个牛逼的Python 可视化库:PyG2Plot》,可惜只是简单介
我的python总结
建议刚开始学习直接使用ANACONDAhttps://www.anaconda.com/download/配置python环境变量https://docs.python.org/3.6/using/cmdline.htmlenvvarPYTHONMALLOCPython PEP8导包顺序1. Python标准
Python编程基础(快速入门必看
Python编程基础一、Python语言基本语法 Python是一
如何用python进行数据分析——00环境配置
↑一个宝藏公众号,长的好看的人都关注了  简单介绍一下Python吧 Python是一种面向对象程序设计语言,由荷兰人吉多·范罗苏姆于1989年底发明。目前是最常用也是最热门的一门编程语言之一,应用非常广泛。 (不是这个面对对象) 为什么选择python呢? 有人说python是万能的,除了生孩子不会,什么都会。 有人说python是未来
零基础应该如何开始学习python
随着人工智能时代的到来,Python也在不断发展壮大,越来越多的人选择学Python,只要因为它容易学习,功能又强大还可以跨平台。其实Python作为一门脚本语言,难度上相较于其他语言略微简单点,但是对于没有计算机基础的人来说,也是非常难得,可能安装这一步就会难倒大家!1、Python学习确定方向对于刚入门的人来说,要先把Python基础和进阶学透,再继续往
怎么学python,学习python的正确姿势
Python是一门相对来说比较简单的编程语言,自学是非常轻松的。首先得明白python有哪些发展方向 需要了解这个这门语言 而不是听说 这个高薪资 容易学习最好的学习状态就是出于兴趣 兴趣是最好的老师 当然对钱感兴趣也是可以的。一、人工智能二、大数据三、网络爬虫工程师四、Python web全栈工程师五、Python自动化运维六、Python自动化测试再来说
python的学习难?你的方法不对罢了,看看我的。
1、选择Python版本对于使用python的人来说,python的版本就是我们的工作环境,因此,在学习之前需要考虑好学习哪个版本,python2和python3的版本不同,会存在一些差异,虽说不大,但直接学习python3 的话相对来说会好一点,而且跑一趟还能3相对来说对零基础的小白来说更加的友好,容易上手。2、学习Python基础知识Python 是一个
全网最全python学习路线图,让学习不迷路
学习Python有一段时间了,最近也是在不断的整理Python相关的基础知识和学习一些新的知识,想来分享给大家。我刚开始接触Python时,和大多数初学者一样不知道从那里开始学习python,我也在网上找了许多python相关的资料来学习,但是资料多也不见得就好,因为不知道从哪里开始下手,走了许多弯路。后面我就整理了一套对初学者来说学习python能很快上手
玩转python爬虫
&ensp;&ensp;&ensp;  近几年来,python的热度一直特别火!大学期间,也进行了一番深入学习,毕业后也曾试图把python作为自己的职业方向,虽然没有如愿成为一名python工程师,但掌握了python,也让我现如今的工作开展和职业发展更加得心应手。这篇文章主要与大家分享一下自己在python爬虫方面的收获与见解。 &ensp;&ensp;
你写的Python代码规范吗?
总第141篇/张俊红1.什么是PEP8PEP 是 Python Enhancement Proposals 的缩写,直译过来就是「Python增强建议书」也可叫做「Python改进建议书」,说的直白点就是Python相关的一些文档,主要用来传递某些信息,这些信息包括某个通知亦或是某个新的规范。关于更深层次的概念,大家有兴趣的可以自行去了解。PEP 后面的数字
盘点一款Python二级考试模拟软件,带你轻松过关二级Python考试
大家好,我是Python进阶者。今天给大家讲的这个软件,主要是想让大家通过这个软件能将自己的Python基础进一步提高。一、前言相信有些小伙伴学习Python有一段时日,但是又不知道自己的Python基础学的如何,这个时候就需要一款神器来检测一下自己的Python基础了。要想检测自己的Python功力最直观的方法当然是做题了,至于做什么题了我们就不得而知了,
10行Python代码自动清理电脑内重复文件,解放双手!
](https://mp.weixin.qq.com/mp/appmsgalbum?actiongetalbum&albumid1337012041701326848&bizMzI1MTUyMjc1Mgwechatredirect) 前言 大家好,又到了Python办公自动化系列。今天分享一个系统层面的自动化案例:「给定一个文件夹,使用Python检查
初窥 Python 的 import 机制
本文适合有 Python 基础的小伙伴进阶学习。 作者:pwwang一、前言本文基于开源项目: https://github.com/pwwang/pythonimportsystem补充扩展讲解,希望能够让读者一文搞懂 Python 的 import 机制。 1.1 什么是 import 机制?通常来讲,在一段 Python 代码中去执行引用另一个模块中