当前位置: 首页 > 科技观察

太冷了!我用Python偷偷查到了我暗恋的女孩的名字

时间:2023-03-16 00:23:07 科技观察

1。目标场景不知道大家有没有遇到过这样的场景。好不容易弄到一个女孩的手机号,却又不好意思搭讪,就问她的名字。有过社会工程学经验的人应该都知道,拿到一个人的手机号后,其他信息就可以轻松获取了。除了花钱,还可以通过支付宝的“模拟转账”方式来取,非常方便。对方的全名。接下来,我们使用Python实现从手机号中获取女生姓名的功能。2.编写代码首先,我们需要爬取一些中国最常用的姓氏,以百度百科-中国姓氏为例。使用xpath+requests可以非常方便的爬取数据。需要注意的是,必须设置“请求头”,才能保证数据能够正常爬取。headers={'Connection':'keep-alive','Pragma':'no-cache','Cache-Control':'no-cache','Upgrade-Insecure-Requests':'1','User-Agent':'Mozilla/5.0(Macintosh;IntelMacOSX10_14_6)AppleWebKit/537.36(KHTML,likeGecko)Chrome/77.0.3865.90Safari/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()")#过滤复杂姓氏=list(filter(self.__get_avai_name,names_pre))print(f'commonsurnames:{len(names)}kinds')returnnames得到普通姓数据后,再用自动化工具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'transfer').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连接设备。这里只需要“暂时关闭保护功能”即可。如果是非好友关系,对方在转账界面显示的姓名不完整,您可以点击“验证按钮”,输入对方姓氏进行确认。所以,大家可以遍历上面得到的姓氏,一一验证。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()#获取真实的名字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()另外在转账页面可以先使用界面元素获取妹子的firstname不包含姓氏,如果输入的lastname不正确,会弹出警告对话框,否则可以获取女孩的lastname。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#姓氏错误ifmsg_error.exists():print('姓氏输入错误')btn_ensure.click()yes_or_right=Falseelse:print('姓氏输入正确')yes_or_right=Truereturnyes_or_right结合上面得到的数据,就可以得到女孩的完整姓名。3、结果与结论取常见姓氏,逐一核对姓名,得到女孩的全名。但由于支付宝对接口的限制,一个账户每天只能有10+次试错机会;所以,如果女孩的姓氏不是那么常见,可能需要多次试错才能取到女孩的名字。源码我已经全部上传到后台,关注公众号回复“你的名字”获取下载链接。如果您觉得文章还不错,请点赞和分享。您的肯定是对我最大的鼓励和支持。