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迭代和迭代器
Mar 28 Python
简单掌握Python的Collections模块中counter结构的用法
Jul 07 Python
Python:Scrapy框架中Item Pipeline组件使用详解
Dec 27 Python
python字符串常用方法
Jun 14 Python
判断python对象是否可调用的三种方式及其区别详解
Jan 31 Python
python图像处理入门(一)
Apr 04 Python
python的等深分箱实例
Nov 22 Python
django连接mysql数据库及建表操作实例详解
Dec 10 Python
Django框架models使用group by详解
Mar 11 Python
Python基于requests实现模拟上传文件
Apr 21 Python
python数字类型和占位符详情
Mar 13 Python
PYTHON 使用 Pandas 删除某列指定值所在的行
Apr 28 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
一个PHP缓存类代码(附详细说明)
2011/06/09 PHP
php面向对象 字段的声明与使用
2012/06/14 PHP
PHP中require和include路径问题详解
2014/12/25 PHP
php使用mysqli向数据库添加数据的方法
2015/03/20 PHP
又拍云异步上传实例教程详解
2016/04/19 PHP
javascript eval函数深入认识
2009/02/21 Javascript
JavaScript中的property和attribute介绍
2011/12/26 Javascript
toggle一个div显示或隐藏且可扩展成自定义下拉框
2013/09/12 Javascript
ajax提交表单实现网页无刷新注册示例
2014/05/08 Javascript
SeaJS 与 RequireJS 的差异对比
2014/12/08 Javascript
JavaScript中setUTCFullYear()方法的使用简介
2015/06/12 Javascript
jQuery Validate初步体验(一)
2015/12/12 Javascript
jqGrid用法汇总(全经典)
2016/06/28 Javascript
前端框架Vue.js构建大型应用浅析
2016/09/12 Javascript
集成vue到jquery/bootstrap项目的方法
2018/02/10 jQuery
详解vue-cli 脚手架 安装
2019/04/16 Javascript
[02:02]DOTA2英雄基础教程 斯拉达
2013/12/11 DOTA
[01:07:13]TNC vs Pain 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
通过5个知识点轻松搞定Python的作用域
2016/09/09 Python
python取余运算符知识点详解
2019/06/27 Python
Python为何不能用可变对象作为默认参数的值
2019/07/01 Python
python 实现将list转成字符串,中间用空格隔开
2019/12/25 Python
在PyCharm中遇到pip安装 失败问题及解决方案(pip失效时的解决方案)
2020/03/10 Python
Selenium自动化测试工具使用方法汇总
2020/06/12 Python
浅谈CSS3 box-sizing 属性 有趣的盒模型
2019/04/02 HTML / CSS
使用phonegap创建联系人的实现方法
2017/03/30 HTML / CSS
Vilebrequin欧洲官网:法国豪华泳装品牌(男士沙滩裤)
2018/04/14 全球购物
linux面试题参考答案(7)
2014/07/24 面试题
人力资源总监工作说明
2014/03/03 职场文书
村抢险救灾方案
2014/05/09 职场文书
物流管理系毕业生求职信
2014/06/03 职场文书
销售员岗位职责
2014/06/09 职场文书
护理目标管理责任书
2014/07/25 职场文书
教师政风行风评议心得体会
2014/10/21 职场文书
员工加薪申请报告
2015/05/15 职场文书
2016高考寄语或鼓励的话语
2015/12/04 职场文书