Python 实现一个手机号码获取妹子名字的功能


Posted in Python onSeptember 25, 2019

1.目标场景

不知道你有没有经历过这样一个场景,好不容易拿到一个妹子的手机号,但是又不好意思去搭讪,问一下对方的名字。

Python 实现一个手机号码获取妹子名字的功能

有过社工科经验的人应该都知道,拿到一个人的手机号码后,其他信息都可以很容易获取到,除了花钱之外,利用支付宝的「模拟转账」方式,可以非常方便的拿到对方的全名。

下面我们用 Python 实现一个手机号码获取妹子名字的功能。

2.编写代码

首先,我们需要爬取国内最常用的一些姓氏,以百度百科 - 中国姓氏为例。

Python 实现一个手机号码获取妹子名字的功能

使用 xpath + requests 可以非常方便地爬取数据。

需要注意的是,必须设置「请求头」,保证数据能正常的爬取下来。

headers = { 
'Connection': 'keep-alive', 
'Pragma': 'no-cache', 
'Cache-Control': 'no-cache', 
'Upgrade-Insecure-Requests': '1', 
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36', 
'Sec-Fetch-Mode': 'navigate', 
'Sec-Fetch-User': '?1', 
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3', 
'Sec-Fetch-Site': 'none', 
'Accept-Encoding': 'gzip, deflate, br', 
'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8', 
} 
def __get_common_family_names(self): 
""" 
爬取常用的姓氏 
:return: 
""" 
resp_text = requests.get(family_name_url, headers=headers).content 
# print(resp_text) 
htmlElement = etree.HTML(text=resp_text) 
# 500多个常见姓氏 
names_pre = htmlElement.xpath("//table[@log-set-param='table_view']//tr//td/a/text()") 
# 过滤复姓 
names = list(filter(self.__get_avai_name, names_pre)) 
print(f'常见姓氏:{len(names)}种') 
return names

拿到常见的姓氏数据后,接着就使用自动化工具 Airtest 模拟打开支付宝 App,并一步步地跳转到转账界面

def __open_app(self): 
  """ 
  打开转账界面 
  :return: 
  """ 
  home() 
  print('打开支付宝') 
  stop_app(self.package_name_aliply) 
  start_my_app(self.package_name_aliply, self.target_activity_name) 
  # 转账 
  self.poco('com.alipay.android.phone.openplatform:id/app_text', text=u'转账').click() 
  # 转账到支付宝 
  self.poco('com.alipay.mobile.transferapp:id/to_account_view_tv', text=u'转到支付宝').click() 
  # 输入账号 
  self.poco('com.alipay.mobile.antui:id/input_edit').set_text(self.account) 
  # 点击下一步 
  self.poco('com.alipay.mobile.transferapp:id/tf_toAccountNextBtn').click()

需要注意的是,像 Flyme 等系统为了防止信息泄露,支付宝应用内是关闭调试模式的,也就是没法利用 adb 连接不上设备。

这里只需「临时关闭保护功能」即可。

Python 实现一个手机号码获取妹子名字的功能

如果是非好友关系,转账界面对方显示的名字不完全,可以点击「验证按钮」,输入对方的姓氏就能进行确认。

所以,可以遍历上面获取到的姓氏,一个个地去验证。

def __simulate_transfer(self, last_name): 
  """ 
  模拟转账 
  :return: 
  """ 
  # 如果不是好友,就不会显示全名 
  # 点击验证名称 
  verify_element = self.poco('com.alipay.mobile.transferapp:id/tf_receiveNameTextView') 
  verify_element.click() 
 
  # 姓名除去姓氏 
  first_name_pre = verify_element.get_text() 
 
  # 获取真实的first name 
  self.first_name = first_name_pre[:first_name_pre.index('(')] 
 
  # 获取姓氏输入框 
  input_element = self.poco('com.alipay.mobile.antui:id/dialog_custom_view').parent().children()[1].children()[0] 
 
  input_element.set_text(last_name) 
 
  # 点击确认按钮,开始验证 
  self.poco('com.alipay.mobile.antui:id/ensure').click()

另外,转账页面可以先利用界面元素拿到妹子不包含姓氏的名字。

如果输入的姓氏不正确,则会弹出警告对话框,否则就能拿到妹子的姓氏了。

def __judge_family_name(self): 
  """ 
  判断姓氏输入是否正确 
  :return: 
  """ 
  msg_error = self.poco('com.alipay.mobile.antui:id/message', text=u'姓名和账户不匹配,为避免转错账,请核对') 
  btn_ensure = self.poco('com.alipay.mobile.antui:id/ensure') 
  yes_or_right = False 
  # 姓氏不对 
  if msg_error.exists(): 
    print('姓氏输入不正确') 
    btn_ensure.click() 
    yes_or_right = False 
  else: 
    print('姓氏输入正确') 
    yes_or_right = True 
  return yes_or_right

组合的上面获取到的数据,就能得到妹子完整的名字啦。

Python 实现一个手机号码获取妹子名字的功能

3.结果结论

拿常用姓氏去一个个验证姓名即可拿到妹子的完整名字。

但是由于支付宝对接口的限制,一个账号每天只能有 10+ 次试错的机会;因此,如果妹子的姓氏不是那么常见,可以需要试错多次才能拿到妹子的名字。

总结

以上所述是小编给大家介绍的Python 实现一个手机号码获取妹子名字的功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
整理Python 常用string函数(收藏)
May 30 Python
TensorFlow模型保存和提取的方法
Mar 08 Python
python 用lambda函数替换for循环的方法
Jun 09 Python
解决python中使用plot画图,图不显示的问题
Jul 04 Python
Python统计纯文本文件中英文单词出现个数的方法总结【测试可用】
Jul 25 Python
理想高通滤波实现Python opencv示例
Jan 30 Python
python爬取微信公众号文章的方法
Feb 26 Python
使用虚拟环境打包python为exe 文件的方法
Aug 29 Python
python 实现让字典的value 成为列表
Dec 16 Python
torch 中各种图像格式转换的实现方法
Dec 26 Python
ffmpeg+Python实现B站MP4格式音频与视频的合并示例代码
Oct 21 Python
tensorflow中的数据类型dtype用法说明
May 26 Python
python 魔法函数实例及解析
Sep 25 #Python
你还在@微信官方?聊聊Python生成你想要的微信头像
Sep 25 #Python
python并发爬虫实用工具tomorrow实用解析
Sep 25 #Python
Python帮你微信头像任意添加装饰别再@微信官方了
Sep 25 #Python
python异步编程 使用yield from过程解析
Sep 25 #Python
手机使用python操作图片文件(pydroid3)过程详解
Sep 25 #Python
Python缓存技术实现过程详解
Sep 25 #Python
You might like
mysql建立外键
2006/11/25 PHP
php Xdebug 调试扩展的安装与使用.
2010/03/13 PHP
PHP开发中四种查询返回结果分析
2011/01/02 PHP
PHP采集腾讯微博的实现代码
2012/01/19 PHP
PHP封装的MSSql操作类完整实例
2016/05/26 PHP
老生常谈php 正则中的i,m,s,x,e分别表示什么
2017/03/02 PHP
PHP+AJAX 投票器功能
2017/11/11 PHP
thinkPHP框架RBAC实现原理分析
2019/02/01 PHP
从数据结构的角度分析 for each in 比 for in 快的多
2013/07/07 Javascript
Javascript小技巧之生成html元素
2014/05/15 Javascript
jQuery层级选择器用法分析
2015/02/10 Javascript
jQuery的事件委托实例分析
2015/07/15 Javascript
JavaScript 是什么意思
2016/09/22 Javascript
angularjs实现下拉列表的选中事件示例
2017/03/03 Javascript
详解如何在Vue2中实现组件props双向绑定
2017/03/29 Javascript
浅谈angular2路由预加载策略
2017/10/04 Javascript
jquery简单实现纵向的无缝滚动代码实例
2019/04/01 jQuery
微信小程序和H5页面间相互跳转代码实例
2019/09/19 Javascript
为nuxt项目写一个面包屑cli工具实现自动生成页面与面包屑配置
2019/09/29 Javascript
javascript实现前端分页功能
2020/11/26 Javascript
python脚本替换指定行实现步骤
2017/07/11 Python
Numpy数据类型转换astype,dtype的方法
2018/06/09 Python
Flask之flask-session的具体使用
2018/07/26 Python
Django处理Ajax发送的Get请求代码详解
2019/07/29 Python
详解python常用命令行选项与环境变量
2020/02/20 Python
python 判断一组数据是否符合正态分布
2020/09/23 Python
PyQT5速成教程之Qt Designer介绍与入门
2020/11/02 Python
HTML5 3D衣服摇摆动画特效
2016/03/17 HTML / CSS
荷兰皇家航空公司中国官网:KLM中国
2017/12/13 全球购物
现代家居用品及礼品:LBC Modern
2018/06/24 全球购物
个人总结格式范文
2015/03/09 职场文书
导游词之西安骊山
2019/12/20 职场文书
浅谈Python魔法方法
2021/06/28 Java/Android
Springboot配置suffix指定mvc视图的后缀方法
2021/07/03 Java/Android
nginx服务器的下载安装与使用详解
2021/08/02 Servers
Go语言入门exec的基本使用
2022/05/20 Golang