阅读 601

Python有哪些神一般的骚操作? 远远不止抢车票、抢红包《附代码》

有人说,

“Python除了不会生孩子,Python从撩妹到装x,无所不能!什么都会!”

下载视频?我用

Python;

玩跳一跳?我用

Python跳到4999分;

撩妹子?依然用

Python;

抢红包抢火车票?没错还是

Python;

就算是整理文件,我也还是用

Python……

下面就详细跟大家分享一些

Python的骚操作:

1、Python让你不再错过抢红包

刚过完年经历了抢红包大战的大家,是不是错过了好几个亿!?
用黑科技

Python,开发一个微信小助手,从此再也不用担心错过巨额红包啦!

实现代码主要有两个部分:

1、接收红包消息,直接从手机端微信获取数据比较麻烦,主流的方法都是通过微信网页版来获取。

因为网页版的消息接口可以被抓包分析,比较容易获取和使用。

2、发通知,最简单的通知方法就是发出声音,还嫌不够的话,可以弹个窗。

打开手机微信

poco(text='微信').click()

#获取当前页面中所有所有群聊的名称

群聊消息的元素标识

Chat_msg = poco(name='com.tencent.mm:id/d1v').offspring('com.tencent.mm:id/b6e')

获取当前页面中所有群聊的名称

Chat_names = []

Chat_names = list(map(lambda x: x.get_text(), Chat_msg))

指定抢红包的群聊名称

chat = input('请指定群聊名称:')

if chat in Chat_names:

index = Chat_names.index(chat)

点击进入指定的群聊

Chat_msg[index].click()

在微信聊天页面中,获取当前页面中的所有消息元素。

msg_list = poco("android.widget.ListView").children()

遍历消息并查找红包

for msg in msg_list:

微信红包的标识

LuckyMoney = msg.offspring('com.tencent.mm:id/aql')

已失效红包(比如已领取、已被领完)的标识

Invalid = msg.offspring('com.tencent.mm:id/aqk')

判断红包是否有效并抢起来!

if LuckyMoney:

pass

#遍历消息并查找红包

if Invalid.exists() and (Invalid.get_text()=='已领取' or Invalid.get_text()=='已被领完'):

print(f'红包已无效,跳过……')

continue

else:

print(f'发现一个新红包,抢起来!')

poco("com.tencent.mm:id/d1v")

msg.click()

click_open = poco("com.tencent.mm:id/d02")

if click_open.exists():

click_open.click()

keyevent('BACK')

#初始化程序

from airtest.core.api import *

auto_setup(file)

from poco.drivers.android.uiautomation import AndroidUiautomationPoco

poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False)

2、Python帮你抢火车票

Python除了抢红包,也是抢火车票的一把好手,说不定你当年买下的黄牛贩子手里的票就是靠Python抢到的。

大家过年回家抢票是不是巨艰辛,今年过年可以写个抢票软件啦!
使用

Python3 抓取12306网站的 车票信息,及时提醒,自动下单。

from splinter.browser import Browser

from time import sleep

import traceback

class Buy_Tickets(object):

定义实例属性,初始化

def init(self, username, passwd, order, passengers, dtime, starts, ends):

self.username = username

self.passwd = passwd

车次,0代表所有车次,依次从上到下,1代表所有车次,依次类推

self.order = order

乘客名

self.passengers = passengers

起始地和终点

self.starts = starts

self.ends = ends

日期

self.dtime = dtime

self.xb = xb

self.pz = pz

self.login_url = 'https://kyfw.12306.cn/otn/login/init'

self.initMy_url = 'https://kyfw.12306.cn/otn/index/initMy12306'

self.ticket_url = 'https://kyfw.12306.cn/otn/leftTicket/init'

self.driver_name = 'chrome'

self.executable_path = 'C:\Python36\Scripts\chromedriver.exe'

登录功能实现

def login(self):

self.driver.visit(self.login_url)

self.driver.fill('loginUserDTO.user_name', self.username)

sleep(1)

self.driver.fill('userDTO.password', self.passwd)

sleep(1)

print('请输入验证码...')

while True:

if self.driver.url != self.initMy_url:

sleep(1)

else:

break

买票功能实现

def start_buy(self):

self.driver = Browser(driver_name=self.driver_name, executable_path=self.executable_path)

#窗口大小的操作

self.driver.driver.set_window_size(700, 500)

self.login()

self.driver.visit(self.ticket_url)

try:

print('开始购票...')

加载查询信息

self.driver.cookies.add({"_jc_save_fromStation": self.starts})

self.driver.cookies.add({"_jc_save_toStation": self.ends})

self.driver.cookies.add({"_jc_save_fromDate": self.dtime})

self.driver.reload()

count = 0

if self.order != 0:

while self.driver.url == self.ticket_url:

self.driver.find_by_text('查询').click()

count += 1

print('第%d次点击查询...' % count)

try:

self.driver.find_by_text('预订')[self.order-1].click()

sleep(1.5)

except Exception as e:

print(e)

print('预订失败...')

continue

else:

while self.driver.url == self.ticket_url:

self.driver.find_by_text('查询').click()

count += 1

print('第%d次点击查询...' % count)

try:

for i in self.driver.find_by_text('预订'):

i.click()

sleep(1)

except Exception as e:

print(e)

print('预订失败...')

continue

print('开始预订...')

sleep(1)

print('开始选择用户...')

for p in self.passengers:

self.driver.find_by_text(p).last.click()

sleep(0.5)

if p[-1] == ')':

self.driver.find_by_id('dialog_xsertcj_ok').click()

print('提交订单...')

sleep(1)

self.driver.find_by_text(self.pz).click()

sleep(1)

self.driver.find_by_text(self.xb).click()

sleep(1)

self.driver.find_by_id('submitOrder_id').click()

sleep(2)

print('确认选座...')

self.driver.find_by_id('qr_submit_id').click()

print('预订成功...')

except Exception as e:

print(e)

if name == 'main':

用户名

username = 'xxxx'

密码

password = 'xxx'

车次选择,0代表所有车次

order = 2

乘客名,比如passengers = ['丁小红', '丁小明']

学生票需注明,注明方式为:passengers = ['丁小红(学生)', '丁小明']

passengers = ['丁彦军']

日期,格式为:'2018-01-20'

dtime = '2018-01-19'

出发地(需填写cookie值)

starts = '%u5434%u5821%2CWUY' #吴堡

目的地(需填写cookie值)

ends = '%u897F%u5B89%2CXAY' #西安

xb =['硬座座']

pz=['成人票']

Buy_Tickets(username, password, order, passengers, dtime, starts, ends).start_buy()

3、Python帮你选房子

过完年很多朋友要开始租房,自己一个个筛一个个查看是不是太累?
那就写个

Python脚本吧,爬取某租房网站的房源信息,利用高德的 js API 在地图上标出房源地点,划出距离工作地点1小时内可到达的范围。

对比租金等,轻轻松松选出最适合的房子。
代码
链家的房租网站
两个导入的包

1.requests 用来过去网页内容

2.BeautifulSoup

import time

import pymssql

import requests

from bs4 import BeautifulSoup

wh.lianjia.com/zufang/

#获取url中下面的内容

def get_page(url):

responce = requests.get(url)

soup = BeautifulSoup(responce.text,'lxml')

return soup

#封装成函数,作用是获取列表下的所有租房页面的链接,返回一个链接列表

def get_links(url):

responce = requests.get(url)

soup = BeautifulSoup(responce.text,'lxml')

link_div = soup.find_all('div',class_ = 'pic-panel')

links = [div.a.get('href') for div in link_div]

return links

#收集一个房子的信息

def get_house_info(house_url):

soup = get_page(house_url)

price = soup.find('span',class_='total').text

unit = soup.find('span',class_= 'unit').text[1:-1]

area = soup.find('p', class_ = 'lf').text

house_info= soup.find_all('p',class_ = 'lf')

area = house_info[0].text[3:] #字符串切片工具

layout = house_info[1].text[5:]

info={

'价格':price,

'单位':unit,

'面积':area,

'户型':layout

}

return info

#链接数据库

server="192.168.xx.xx" #换成自己的服务器信息

user="liujiepeng"

password="xxxxx" #自己的数据库用户名和密码

conn=pymssql.connect(server,user,password,database="house")

def insert(conn,house):

#sql_values = values.format(house['价格'],house['单位'],house['面积'],

#house['户型'])

sql = "insert into [house].dbo.lianjia(price,unit,area,layout)values('%s','%s','%s','%s')"%(house["价格"],house["单位"],house["面积"],house["户型"])

print(sql)

cursor = conn.cursor() #游标,开拓新的窗口

#cursor1 = conn.cursor()

cursor.execute(sql) #执行sql语句

conn.commit() #提交 ,更新sql 语句

links = get_links('https://wh.lianjia.com/zufang/')

count = 1

for link in links:

#time.sleep(2)

print('获取一个数据成功')

house = get_house_info(link)

insert(conn,house)

print("第%s个数据,存入数据库成功!"%(count))

count = count+1

#print(house["价格"],end='\r')

4、Python找回女神撤回的消息

除了这些日常操作,麦教授说几个你想不到的吧。
当自己一直喜欢的女神发给自己一个消息的时候,还没来得及看,就撤回了。
是不是自己在心中

"YY",她是不是发了什么,然后你问她的时候,她却说没什么。

学会

Python,你可以做一个程序,把私聊撤回的信息可以收集起来并发送到个人微信的文件传输助手。

5、Python自己写小游戏

Python写几个小游戏玩玩也不过是几十行代码的事,比如写个贪吃蛇!

还记得之前火爆一时的跳一跳,如果你早点学会

Python,就可以常年占据排行榜第1了,还是全自动的效果,很有趣!

跳一跳代码:

from future import print_function

import numpy as np

import matplotlib.pyplot as plt

import matplotlib.animation as animation

import math

import time

import os

import cv2

import datetime

scale = 0.25

template = cv2.imread('character.png')

template = cv2.resize(template, (0, 0), fx=scale, fy=scale)

template_size = template.shape[:2]

def search(img):

result = cv2.matchTemplate(img, template, cv2.TM_SQDIFF)

min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)

cv2.rectangle(img, (min_loc[0], min_loc[1]), (min_loc[0] + template_size[1], min_loc[1] + template_size[0]), (255, 0, 0), 4)

return img, min_loc[0] + template_size[1] / 2, min_loc[1] + template_size[0]

def pull_screenshot():

filename = datetime.datetime.now().strftime("%H%M%S") + '.png'

os.system('mv autojump.png {}'.format(filename))

os.system('adb shell screencap -p /sdcard/autojump.png')

os.system('adb pull /sdcard/autojump.png .')

def jump(distance):

press_time = distance * 1.35

press_time = int(press_time)

cmd = 'adb shell input swipe 320 410 320 410 ' + str(press_time)

print(cmd)

os.system(cmd)

def update_data():

global src_x, src_y

img = cv2.imread('autojump.png')

img = cv2.resize(img, (0, 0), fx=scale, fy=scale)

img, src_x, src_y = search(img)

return img

fig = plt.figure()

index = 0

pull_screenshot()

img = update_data()

update = True

im = plt.imshow(img, animated=True)

def updatefig(*args):

global update

if update:

time.sleep(1)

pull_screenshot()

im.set_array(update_data())

update = False

return im,

def onClick(event):

global update

global src_x, src_y

dst_x, dst_y = event.xdata, event.ydata

distance = (dst_x - src_x)**2 + (dst_y - src_y)**2

distance = (distance ** 0.5) / scale

print('distance = ', distance)

jump(distance)

update = True

fig.canvas.mpl_connect('button_press_event', onClick)

ani = animation.FuncAnimation(fig, updatefig, interval=5, blit=True)

plt.show()

贪吃蛇代码:

#!/usr/bin/env python

import pygame,sys,time,random

from pygame.locals import *

定义颜色变量

redColour = pygame.Color(255,0,0)

blackColour = pygame.Color(0,0,0)

whiteColour = pygame.Color(255,255,255)

greyColour = pygame.Color(150,150,150)

定义gameOver函数

def gameOver(playSurface):

gameOverFont = pygame.font.Font('arial.ttf',72)

gameOverSurf = gameOverFont.render('Game Over', True, greyColour)

gameOverRect = gameOverSurf.get_rect()

gameOverRect.midtop = (320, 10)

playSurface.blit(gameOverSurf, gameOverRect)

pygame.display.flip()

time.sleep(5)

pygame.quit()

sys.exit()

定义main函数

def main():

初始化pygame

pygame.init()

fpsClock = pygame.time.Clock()

创建pygame显示层

playSurface = pygame.display.set_mode((640,480))

pygame.display.set_caption('Raspberry Snake')

初始化变量

snakePosition = [100,100]

snakeSegments = [[100,100],[80,100],[60,100]]

raspberryPosition = [300,300]

raspberrySpawned = 1

direction = 'right'

changeDirection = direction

while True:

检测例如按键等pygame事件

for event in pygame.event.get():

if event.type == QUIT:

pygame.quit()

sys.exit()

elif event.type == KEYDOWN:

判断键盘事件

if event.key == K_RIGHT or event.key == ord('d'):

changeDirection = 'right'

if event.key == K_LEFT or event.key == ord('a'):

changeDirection = 'left'

if event.key == K_UP or event.key == ord('w'):

changeDirection = 'up'

if event.key == K_DOWN or event.key == ord('s'):

changeDirection = 'down'

if event.key == K_ESCAPE:

pygame.event.post(pygame.event.Event(QUIT))

判断是否输入了反方向

if changeDirection == 'right' and not direction == 'left':

direction = changeDirection

if changeDirection == 'left' and not direction == 'right':

direction = changeDirection

if changeDirection == 'up' and not direction == 'down':

direction = changeDirection

if changeDirection == 'down' and not direction == 'up':

direction = changeDirection

根据方向移动蛇头的坐标

if direction == 'right':

snakePosition[0] += 20

if direction == 'left':

snakePosition[0] -= 20

if direction == 'up':

snakePosition[1] -= 20

if direction == 'down':

snakePosition[1] += 20

增加蛇的长度

snakeSegments.insert(0,list(snakePosition))

判断是否吃掉了树莓

if snakePosition[0] == raspberryPosition[0] and snakePosition[1] == raspberryPosition[1]:

raspberrySpawned = 0

else:

snakeSegments.pop()

如果吃掉树莓,则重新生成树莓

if raspberrySpawned == 0:

x = random.randrange(1,32)

y = random.randrange(1,24)

raspberryPosition = [int(x20),int(y20)]

raspberrySpawned = 1

绘制pygame显示层

playSurface.fill(blackColour)

for position in snakeSegments:

pygame.draw.rect(playSurface,whiteColour,Rect(position[0],position[1],20,20))

pygame.draw.rect(playSurface,redColour,Rect(raspberryPosition[0], raspberryPosition[1],20,20))

刷新pygame显示层

pygame.display.flip()

判断是否死亡

if snakePosition[0] > 620 or snakePosition[0] < 0:

gameOver(playSurface)

if snakePosition[1] > 460 or snakePosition[1] < 0:

for snakeBody in snakeSegments[1:]:

if snakePosition[0] == snakeBody[0] and snakePosition[1] == snakeBody[1]:

gameOver(playSurface)

控制游戏速度

fpsClock.tick(5)

if name == "main":

main()

6、Python爬取你想要的信息

还可以用

python爬取电影分析影评,用词云进行展示效果:

写几行代码浪漫一把也是可以的,你也可以把里面的字符换成爱人的名字,做成浪漫的云图词!

7、Python看看你朋友圈都是什么样的人

掌握

python以后,你玩微信别人也玩微信。

但是你可以得到不一样的骚操作,几十行代码掌握你朋友圈都是些什么样的人!
比如?爬取微信好友男女比例并进行可视化
再来看看你的好友都来自哪个地方
这还不够,来把好友的个性签名也玩出逼格,做个创意的文字图,看看大家都在说什么
温馨小提示,如果分析的对象换成你的用户们

...是不是业绩能蹭蹭上涨?

8、Python自己做小动画

还可以用字符串跳一段

MV,成为B站大佬,使用 OpenCV 处理图片视频,将视频转为字符画序列,再在终端中播放字符动画。

9、Python鉴黄

看看

Python还能用来干嘛

《图片就不放了
怕被举报
自行想象》
哈哈
可以用来

emmm 鉴黄!

使用

Python3 去识别图片是否为色情图片,利用PIL 这个图像处理库,会编写算法来划分图像的皮肤区域。

其中涉及到

Python 3 基础知识,肤色像素检测与皮肤区域划分算法。

是不是万万没想到?

10、PythonAI医疗

还被用进医疗的领域。
典型如腾讯觅影这样的产品,用于

AI医学图像分析,在癌症的早期识别上,人工智能对拍片的识别能力,也已经超过人类医生。

Python能做的好玩又实用的事情实在太多啦!欢迎留言一起分享讨论

不一定要你学的非常专业才可以实现,里面有些也是非程序员

Python用户做出来的好玩的东西,期待着你利用Python 去做出更多有趣的事情!