python达成12306抢票及机关邮件发送指示付款功效,python达成12306抢票以及活动邮件发送提示付款

#写在前头,这么些程序作者早就弄出来了,可是因为黄牛泛滥以及懒人太多,整个程序的代码就不贴出来了,这里纯粹正是才能沟通。

python达成12306抢票以及活动邮件发送提醒付款,python12306

#写在头里,那个顺序作者早就弄出来了,不过因为黄牛泛滥以及懒人太多,整个程序的代码就不贴出来了,这里纯粹就是技能沟通。

只做本领调换、、、、、

澳门葡京备用网址 1澳门葡京备用网址 2

嗯,程序停止后,本身依旧得手动付款。

python达成12306抢票及机关邮件发送指示付款功效,python达成12306抢票以及活动邮件发送提示付款。废话不多说,上边就径直发轫技巧首要部分演说。

先讲理论部分:首先大家需求代码落成叁个浏览器功用,那么模块基本上能够规定urllib.parse、urllib.request,那八个包都以和网站有关的模块,那么大家去登入三个网址,越发是有验证码那些的网址,我们登入进去是还是不是就行了?答案是对的,然而大家用代码实现的话,这一个网站大概每一次都有望被代码去乞请,那么服务器怎么知道我们是一人,而不是多个浏览器区别的用户呢?

那时cookie就可怜重要了,在代码中装置好cookie,那么对方服务器自然就了解大家是壹个人,相比较服务器都以那般区分的。python三中
cookie这些效果是封装在http.cookiejar这几个模块之内。好了,代码如下:

# coding=utf-8
# author: Jason
# time:2018/1/16 20:00:00
#version:1.0
import urllib.request as ul
import urllib.parse as uz
import http.cookiejar as cookielib
from json import loads
c=cookielib.LWPCookieJar()#先把cookie对象存储为cookiejar的对象
cookie = ul.HTTPCookieProcessor(c)#把cookiejar对象转换为一个handle
opener = ul.build_opener(cookie)#建立一个模拟浏览器,需要handle作为参数
ul.install_opener(opener)#安装一个全局模拟浏览器,代表无论怎么访问都是一个浏览器操作而不是分开获取验证码等msg

好了,如此一来,大家代码的始发达成已经完毕,接下去便是跻身互联网分析部分

第叁能够选用google浏览器如故搜狗浏览器(自身用的搜狗),张开F1贰,也正是开辟者情势,登入1230陆的报到地址

澳门葡京备用网址 3

八个红圈中第3个是验证码来源,此时我们只必要记录这几个网页(点进入)的详细意况,写入代码个中,python3中urllib.request那么些模块展开既可

澳门葡京备用网址 4

这么就是验证码来源,那么什么样用代码捕捉呢?首先我们能够先乱输入密码,乱点验证码,然后大家一直点击登6

澳门葡京备用网址 5

 

 

 

多了两个很奇妙的事物,此时,这里正是验证码认证的网站,那么我们是或不是理所应当记录下来呢?很简短,到Headers里面就全都看获得了

澳门葡京备用网址 6

上边十一分是服务器验证网站,上面正是大家过来给她的事物,那么那么些1六三,1二1实在正是自家乱点的验证码坐标了。至于何以是坐标,因为它是用鼠标去点图片,那么她只大概是记录坐标,除非他和煦搞了1套人工智能验证图片,但依赖他几年前就像此玩了,人工智能根本未有怎么先导,他当然只好是最原始的本事而已。

那么那代表了她是先证实验证码,那么注解密码的在哪?自然是内需验证码这关能过,那大家输贰个没有错的验证码,再写个错密码,登入

澳门葡京备用网址 7

那时候得以看看,和验证码同样的方法,大家的过来与认证都在那多少个圈了,还记得上边验证码失败的时候回复给大家的code是或不是有个数字?那一个也很关键,那么能够看看大家的注解成功的验证码再次回到给咱们的是何许东西

澳门葡京备用网址 8

本次我们看看了,验证码成功,展现是四,好,那我们不就可以张开标准判定了么?

 

那就是说如何展开多个网站然后把大家点的事物1块发过去啊?上代码

headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36'}#先写个头,表示我这是浏览器用户登录而不是代码登录,如果不写,代码默认用的签名之类的是编程语言的标识,这样对方服务器很容易就发现你是个脚本了

def get_code():#获取验证码的步骤
    req = ul.Request('https://kyfw.12306.cn/passport/captcha/captcha-image?login_site=E&module=login&rand=sjrand&0.6758635422370105')
    req.headers = headers
    code_file = opener.open(req).read()#此时为浏览器的open而不再是ul.urlopen,下同
    with open(r'C:\Users\Administrator\Desktop\12306自动抢票\code.png','wb')as f:
        f.write(code_file)

把验证码直接下载后方Computer上,前边要坐标只须要开发那几个图既可输入,坐标的输入情势本身用字典表示给我们看{一:(四5,肆五)}{贰:(120,4伍)}{3:(180,四5)}{四:(25伍,肆伍)}{5:(肆伍,120)}{陆:(120,120)}{柒:(180,120)}{八:(255,120)}

依照这一个验证码的排序,小编相信读者应当清楚各样怎么来的吧,相比较坐标就能够懂了。

继续

def main_():
    get_code()
    code = input('输入验证码:')
    req = ul.Request('https://kyfw.12306.cn/passport/captcha/captcha-check')
    req.headers = headers

    data = {
        'answer':code,
        'login_site':'E',
        'rand':'sjrand'
    }
    data = uz.urlencode(data).encode()#把字典转换为URL query string,此时是str,要把它变为byts。

    html = opener.open(req,data= data).read().decode()#读取出来是byts格式,转换为‘utf-8(默认)
    print(html)
    result = loads(html)
    if result['result_code']=='4':
        print('验证码通过')
        rep = ul.Request('https://kyfw.12306.cn/passport/web/login')
        rep.headers = headers
        data = {'username':'这里就是你用户名',
                'password':'这里就是你的密码',
                'appid':'otn'
        }
        data = uz.urlencode(data).encode() #看到了吗,这就是你给服务器回复的东西

        html1 = opener.open(rep,data = data ).read().decode()
        result1 = loads(html1)
        if result1['result_code'] == 0:
            print('账户密码验证通过')
        else:
            print(result1['result_message'])

    else:
        print('验证码校验失败,重来')


if __name__ == '__main__':
    main_()

此刻,大家就过了验证码密码那一关,后边是否又要查票?那么等同的章程,大家就足以由此及彼到最终一步,这里就不一1贴代码了

ps:查代码这几步的音信可是很要紧喔,大家要把它记录好,并且那在这之中的消息包括了各类作为音讯以及她们的逐一,多测试一次主旨都能搞出来,这里正是提示一点

澳门葡京备用网址 9

 

 找找规律,然后用split的情势完全就足以切割出来,然后贰个循环,就足以赢得第多少个要素是大家要的,那么前边就足以申明判定再次回到值要是是无,就没票能够持续查询,直到有票就能够下一步;

那么有票的话,前边同样也是就那样推算的艺术,代码我就不复发了,很简单,作者就把前面出现须求请求的网站都发生来供大家观摩

查询车票音信

url = 'https://kyfw.12306.cn/otn/leftTicket/queryZ?leftTicketDTO.train_date=%s&leftTicketDTO.from_station=%s&leftTicketDTO.to_station=%s&purpose_codes=ADULT'%(train_data,from_station,to_station)

 

req = ul.Request('https://kyfw.12306.cn/otn/leftTicket/submitOrderRequest')#确定订单信息
req = ul.Request("https://kyfw.12306.cn/otn/confirmPassenger/initDc")#验证订单
req = ul.Request('https://kyfw.12306.cn/otn/confirmPassenger/getPassengerDTOs')#准备跨到下单中的过度
req = ul.Request('https://kyfw.12306.cn/otn/confirmPassenger/checkOrderInfo')#检查订单信息
req = ul.Request('https://kyfw.12306.cn/otn/confirmPassenger/getQueueCount')#信息提交给服务器,准备进入下单步骤
req = ul.Request('https://kyfw.12306.cn/otn/confirmPassenger/confirmSingleForQueue')#正式进入下单步骤
req = ul.Request('https://kyfw.12306.cn/otn/confirmPassenger/queryOrderWaitTime?random=%s&tourFlag=dc&_json_att=&REPEAT_SUBMIT_TOKEN=%s'%(numb,time.time()))#下单确认中,此时这个网址一般是进行两次访问,不知为何,我还是做了两次访问,numb是前面查询车票点击预定回复我们的信息中的一条,有点难找喔,我曾经找了三天。。。当然是因为自己不仔细而已
zreq = ul.Request("https://kyfw.12306.cn/otn/confirmPassenger/resultOrderForDcQueue")#最后的结果回执,如果一切都顺利,那么票就已经订了。我一般是打印他返回的内容
'''
            zreq = ul.Request("https://kyfw.12306.cn/otn/confirmPassenger/resultOrderForDcQueue")
            zreq.headers = headers
            data ={"REPEAT_SUBMIT_TOKEN":"%s"%numb,
                   "_json_att": "",
                   "orderSequence_no":orderId
                   }
            data = uz.urlencode(data).encode()
            html = opener.open(zreq,data=data).read().decode()
            result = loads(html)
            print('代码全部过完,回去登录下是否搞定')
            print(result)
            print(result['data']['submitStatus'])
            if result['data']['submitStatus'] == True:
                print('购票成功')
                return True
            else:
                print('购票失败,重试其他列车')
                continue
'''
最终的回执代码详细 信息,读者可以自己尝试多次,得到自己的回复代码确认是否购票成功,因为result['data']['submitStatus']==True只不过是确认订单状态而已,这个被我改动过,你可以多次尝试

末段的尾声,高铁票预约成功唯有三11分钟支付时间,所以本人为着防卫订好票不过自作者人不在,特意写了qq邮件通告

qq邮件布告:

def email():#这是我订票后给自己发邮件的函数
    import smtplib
    from email.mime.text import MIMEText
    import time
    text = '已经为%s抢到票,速度登录12306付款,用户名:%s,密码:%s'%(NAME,username,password)


    msg = MIMEText(text, 'plain', 'utf-8')
    msg_From = '2059****[email protected]'
    msg_To = '5043****[email protected]'#是的,我有两个qq,一个发一个收

    smtpSever = 'smtp.qq.com'  # qq邮箱的smtp Sever地址
    smtpPort = '465'  # 开放的端口
    sqm = 'q********eghe'  # 在登录smtp时需要login中的密码应当使用授权码而非账户密码

    msg['from'] = msg_From
    msg['to'] = msg_To
    msg['subject'] = 'Python自动邮件-%s' % time.ctime()
    smtp = smtplib
    smtp = smtplib.SMTP_SSL()
    '''
    smtplib的connect(连接到邮件服务器)、login(登陆验证)、sendmail(发送邮件)
    '''
    smtp.connect(smtpSever, smtpPort)
    smtp.login(msg_From, sqm)
    smtp.sendmail(msg_From, msg_To, str(msg))
    # s = smtplib.SMTP("localhost")
    # s.send_message(msg)
    smtp.quit()
    print('邮件已发送~你可以安心去玩了')

def emailforcode():#此函数是防止查询有票但12306账号掉线人不在无法订票的提醒
    import smtplib
    from email.mime.text import MIMEText
    import time
    text = '%s账号下线,速度登录验证12306' % NAME

    msg = MIMEText(text, 'plain', 'utf-8')
    msg_From = '205****[email protected]'
    msg_To = '50****[email protected]'

    smtpSever = 'smtp.qq.com'  # qq邮箱的smtp Sever地址
    smtpPort = '465'  # 开放的端口
    sqm = 'qowa*******ghe'  # 在登录smtp时需要login中的密码应当使用授权码而非账户密码

    msg['from'] = msg_From
    msg['to'] = msg_To
    msg['subject'] = 'Python自动邮件-%s' % time.ctime()
    smtp = smtplib
    smtp = smtplib.SMTP_SSL()
    '''
    smtplib的connect(连接到邮件服务器)、login(登陆验证)、sendmail(发送邮件)
    '''
    smtp.connect(smtpSever, smtpPort)
    smtp.login(msg_From, sqm)
    smtp.sendmail(msg_From, msg_To, str(msg))
    # s = smtplib.SMTP("localhost")
    # s.send_message(msg)
    smtp.quit()
    print('邮件已发送~')

如此就大功告成了。

 

不能够发完整的代码(本人目的正是为了手艺调换而已,幸免懒人盗码乱搞),可是本人相信各位开垦中的朋友们假设有逻辑,有开头,只要本人肯入手,都得以协调商量出来,举一反三。究竟小编便是如此搞出来的,小编一向都相信,只要肯学,都会学会,只要肯做,都能够做成。

 

好了,人生苦短,笔者用python,小编是1枚土木人转行搞开垦的小白。1切全靠自学,一同加油,共勉~

#写在前面,那一个顺序小编曾经弄出来了,然则因为黄牛泛滥以及懒人太多,整个程序…

python完结12306抢票及机关邮件发送提示付款作用,python1230陆

#写在后面,这么些顺序笔者曾经弄出来了,可是因为黄牛泛滥以及懒人太多,整个程序的代码就不贴出来了,这里纯粹正是本事沟通。

只做本事调换、、、、、

澳门葡京备用网址 10
澳门葡京备用网址 11

哦,程序甘休后,本身或然得手动付款。

废话不多说,下边就一直伊始本领首要部分解说。

先讲理论部分:首先我们须求代码达成八个浏览器作用,那么模块基本上能够规定urllib.parse、urllib.request,那五个包都以和网站有关的模块,那么我们去登陆二个网站,越发是有验证码那一个的网站,大家登陆进去是不是就行了?答案是对的,不过我们用代码完成的话,这一个网站也许每回都有希望被代码去伏乞,那么服务器怎么领悟大家是一个人,而不是七个浏览器差异的用户呢?

那时cookie就分外主要了,在代码中装置好cookie,那么对方服务器自然就知晓大家是一个人,比较服务器都是这么区分的。python三中
cookie这么些意义是封装在http.cookiejar那一个模块之内。好了,代码如下:

# coding=utf-8
# author: Jason
# time:2018/1/16 20:00:00
#version:1.0
import urllib.request as ul
import urllib.parse as uz
import http.cookiejar as cookielib
from json import loads
c=cookielib.LWPCookieJar()#先把cookie对象存储为cookiejar的对象
cookie = ul.HTTPCookieProcessor(c)#把cookiejar对象转换为一个handle
opener = ul.build_opener(cookie)#建立一个模拟浏览器,需要handle作为参数
ul.install_opener(opener)#安装一个全局模拟浏览器,代表无论怎么访问都是一个浏览器操作而不是分开获取验证码等msg

好了,如此壹来,我们代码的起来完毕已经到位,接下去就是进入网络分析部分

率先能够利用google浏览器如故搜狗浏览器(本身用的搜狗),张开F12,也便是开辟者形式,登612306的记名地址

澳门葡京备用网址 12

八个红圈中第三个是验证码来源,此时我们只必要记录那个网页(点进去)的详细情况,写入代码其中,python三中urllib.request这些模块展开既可

澳门葡京备用网址 13

这么正是验证码来源,那么怎么样用代码捕捉呢?首先我们得以先乱输入密码,乱点验证码,然后大家一贯点击登入

澳门葡京备用网址 14

多了2个很奇异的事物,此时,这里正是验证码认证的网站,那么大家是否应当记录下来呢?很轻松,到Headers里面就全都看得到了

澳门葡京备用网址 15

上面拾叁分是服务器验证网站,下边就是大家回复给他的东西,那么那2个1陆3,1二一实际正是自己乱点的验证码坐标了。至于缘何是坐标,因为它是用鼠标去点图片,那么她只或者是记录坐标,除非他协和搞了一套人工智能验证图片,但据书上说他几年前就好像此玩了,人工智能根本未曾怎么开端,他本来只能是最原始的才干而已。

那么那代表了他是先验证验证码,那么注解密码的在哪?自然是须求验证码那关能过,那大家输二个没错的验证码,再写个错密码,登六

澳门葡京备用网址 16

这儿能够见到,和验证码同样的法门,大家的恢复生机与认证都在那多少个圈了,还记得上面验证码失利的时候回复给大家的code是或不是有个数字?这几个也很重大,那么能够看看大家的求证成功的验证码再次来到给大家的是怎么事物

澳门葡京备用网址 17

这一次大家看出了,验证码成功,突显是四,好,那大家不就能够实行规范化决断了么?

那正是说哪些开荒3个网站然后把大家点的东西一块发过去吗?上代码

headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36'}#先写个头,表示我这是浏览器用户登录而不是代码登录,如果不写,代码默认用的签名之类的是编程语言的标识,这样对方服务器很容易就发现你是个脚本了

def get_code():#获取验证码的步骤
  req = ul.Request('https://kyfw.12306.cn/passport/captcha/captcha-image?login_site=E&module=login&rand=sjrand&0.6758635422370105')
  req.headers = headers
  code_file = opener.open(req).read()#此时为浏览器的open而不再是ul.urlopen,下同
  with open(r'C:\Users\Administrator\Desktop\12306自动抢票\code.png','wb')as f:
    f.write(code_file)

把验证码直接下载后方Computer上,后边要坐标只须求开发那些图既可输入,坐标的输入格局自己用字典表示给大家看{一:(肆伍,45)}{2:(120,四伍)}{三:(180,四伍)}{肆:(25五,四伍)}{5:(45,120)}{陆:(120,120)}{7:(180,120)}{八:(25五,120)}

基于这么些验证码的排序,小编深信读者应当领会各样怎么来的呢,比较坐标就会懂了。

继续

def main_():
  get_code()
  code = input('输入验证码:')
  req = ul.Request('https://kyfw.12306.cn/passport/captcha/captcha-check')
  req.headers = headers

  data = {
    'answer':code,
    'login_site':'E',
    'rand':'sjrand'
  }
  data = uz.urlencode(data).encode()#把字典转换为URL query string,此时是str,要把它变为byts。

  html = opener.open(req,data= data).read().decode()#读取出来是byts格式,转换为‘utf-8(默认)
  print(html)
  result = loads(html)
  if result['result_code']=='4':
    print('验证码通过')
    rep = ul.Request('https://kyfw.12306.cn/passport/web/login')
    rep.headers = headers
    data = {'username':'这里就是你用户名',
        'password':'这里就是你的密码',
        'appid':'otn'
    }
    data = uz.urlencode(data).encode() #看到了吗,这就是你给服务器回复的东西

    html1 = opener.open(rep,data = data ).read().decode()
    result1 = loads(html1)
    if result1['result_code'] == 0:
      print('账户密码验证通过')
    else:
      print(result1['result_message'])

  else:
    print('验证码校验失败,重来')


if __name__ == '__main__':
  main_()

此刻,我们就过了验证码密码那壹关,前边是或不是又要查票?那么一样的章程,咱们就足以由此及彼到最终一步,这里就不壹一贴代码了

ps:查代码这几步的音信然则很主要喔,我们要把它记录好,并且那中间的新闻包涵了种种作为新闻以及她们的次第,多测试几回大旨都能搞出来,这里便是引玉之砖一点

澳门葡京备用网址 18

找找规律,然后用split的格局完全就足以切割出来,然后四个循环往复,就能够收获第多少个成分是大家要的,那么前面就足以注明判定再次来到值即使是无,就没票能够三番五次查询,直到有票就足以下一步;

这便是说有票的话,后边一样也是由此及彼的主意,代码小编就不复发了,不会细小略,作者就把前面出现须要请求的网站都发生来供我们观摩

查询车票音讯

url = 'https://kyfw.12306.cn/otn/leftTicket/queryZ?leftTicketDTO.train_date=%s&leftTicketDTO.from_station=%s&leftTicketDTO.to_station=%s&purpose_codes=ADULT'%(train_data,from_station,to_station)

req = ul.Request('https://kyfw.12306.cn/otn/leftTicket/submitOrderRequest')#确定订单信息
req = ul.Request("https://kyfw.12306.cn/otn/confirmPassenger/initDc")#验证订单
req = ul.Request('https://kyfw.12306.cn/otn/confirmPassenger/getPassengerDTOs')#准备跨到下单中的过度
req = ul.Request('https://kyfw.12306.cn/otn/confirmPassenger/checkOrderInfo')#检查订单信息
req = ul.Request('https://kyfw.12306.cn/otn/confirmPassenger/getQueueCount')#信息提交给服务器,准备进入下单步骤
req = ul.Request('https://kyfw.12306.cn/otn/confirmPassenger/confirmSingleForQueue')#正式进入下单步骤
req = ul.Request('https://kyfw.12306.cn/otn/confirmPassenger/queryOrderWaitTime?random=%s&tourFlag=dc&_json_att=&REPEAT_SUBMIT_TOKEN=%s'%(numb,time.time()))#下单确认中,此时这个网址一般是进行两次访问,不知为何,我还是做了两次访问,numb是前面查询车票点击预定回复我们的信息中的一条,有点难找喔,我曾经找了三天。。。当然是因为自己不仔细而已
zreq = ul.Request("https://kyfw.12306.cn/otn/confirmPassenger/resultOrderForDcQueue")#最后的结果回执,如果一切都顺利,那么票就已经订了。我一般是打印他返回的内容
'''
      zreq = ul.Request("https://kyfw.12306.cn/otn/confirmPassenger/resultOrderForDcQueue")
      zreq.headers = headers
      data ={"REPEAT_SUBMIT_TOKEN":"%s"%numb,
          "_json_att": "",
          "orderSequence_no":orderId
          }
      data = uz.urlencode(data).encode()
      html = opener.open(zreq,data=data).read().decode()
      result = loads(html)
      print('代码全部过完,回去登录下是否搞定')
      print(result)
      print(result['data']['submitStatus'])
      if result['data']['submitStatus'] == True:
        print('购票成功')
        return True
      else:
        print('购票失败,重试其他列车')
        continue
'''
最终的回执代码详细 信息,读者可以自己尝试多次,得到自己的回复代码确认是否购票成功,因为result['data']['submitStatus']==True只不过是确认订单状态而已,这个被我改动过,你可以多次尝试

聊到底的末梢,轻轨票预约成功唯有三十多分钟支付时间,所以本人为着以免订好票不过自我人不在,特意写了qq邮件通告

qq邮件布告:

def email():#这是我订票后给自己发邮件的函数
  import smtplib
  from email.mime.text import MIMEText
  import time
  text = '已经为%s抢到票,速度登录12306付款,用户名:%s,密码:%s'%(NAME,username,password)
  msg = MIMEText(text, 'plain', 'utf-8')
  msg_From = '2059****[email protected]'
  msg_To = '5043****[email protected]'#是的,我有两个qq,一个发一个收
  smtpSever = 'smtp.qq.com' # qq邮箱的smtp Sever地址
  smtpPort = '465' # 开放的端口
  sqm = 'q********eghe' # 在登录smtp时需要login中的密码应当使用授权码而非账户密码
  msg['from'] = msg_From
  msg['to'] = msg_To
  msg['subject'] = 'Python自动邮件-%s' % time.ctime()
  smtp = smtplib
  smtp = smtplib.SMTP_SSL()
  '''
  smtplib的connect(连接到邮件服务器)、login(登陆验证)、sendmail(发送邮件)
  '''
  smtp.connect(smtpSever, smtpPort)
  smtp.login(msg_From, sqm)
  smtp.sendmail(msg_From, msg_To, str(msg))
  # s = smtplib.SMTP("localhost")
  # s.send_message(msg)
  smtp.quit()
  print('邮件已发送~你可以安心去玩了')
def emailforcode():#此函数是防止查询有票但12306账号掉线人不在无法订票的提醒
  import smtplib
  from email.mime.text import MIMEText
  import time
  text = '%s账号下线,速度登录验证12306' % NAME
  msg = MIMEText(text, 'plain', 'utf-8')
  msg_From = '205****[email protected]'
  msg_To = '50****[email protected]'
  smtpSever = 'smtp.qq.com' # qq邮箱的smtp Sever地址
  smtpPort = '465' # 开放的端口
  sqm = 'qowa*******ghe' # 在登录smtp时需要login中的密码应当使用授权码而非账户密码
  msg['from'] = msg_From
  msg['to'] = msg_To
  msg['subject'] = 'Python自动邮件-%s' % time.ctime()
  smtp = smtplib
  smtp = smtplib.SMTP_SSL()
  '''
  smtplib的connect(连接到邮件服务器)、login(登陆验证)、sendmail(发送邮件)
  '''
  smtp.connect(smtpSever, smtpPort)
  smtp.login(msg_From, sqm)
  smtp.sendmail(msg_From, msg_To, str(msg))
  # s = smtplib.SMTP("localhost")
  # s.send_message(msg)
  smtp.quit()
  print('邮件已发送~')

这么就马到功成了。

不能够发完整的代码(本人目标正是为了技艺交换而已,制止懒人盗码乱搞),但是本身相信各位开采中的朋友们假诺有逻辑,有起初,只要本人肯出手,都得以友善切磋出来,举一反三。毕竟自个儿正是如此搞出来的,笔者根本都相信,只要肯学,都会学会,只要肯做,都得以做成。

总结

以上所述是作者给大家介绍的python完毕12306抢票及机动邮件发送提示付款成效,希望对我们有着帮助,假设我们有别的疑问请给自个儿留言,作者会及时还原大家的。在此也十三分感激我们对帮客之家网址的帮衬!

#写在眼下,这一个顺序笔者早已弄出来了,可是因为黄牛泛滥以及懒人太多,整个程…

#写在前面,那些顺序作者曾经弄出来了,可是因为黄牛泛滥以及懒人太多,整个程序的代码就不贴出来了,这里纯粹正是技能交流。

只做技巧交流、、、、、

只做才具调换、、、、、

澳门葡京备用网址 19澳门葡京备用网址 20

澳门葡京备用网址 21
澳门葡京备用网址 22

哦,程序停止后,本身或许得手动付款。

啊,程序甘休后,自身照旧得手动付款。

废话不多说,上面就向来起始才干主要部分解说。

废话不多说,下面就从来开始才具主要部分解说。

先讲理论部分:首先大家供给代码完结贰个浏览器功用,那么模块基本上能够规定urllib.parse、urllib.request,那八个包都是和网址有关的模块,那么大家去登入一个网站,特别是有验证码这一个的网站,我们登入进去是还是不是就行了?答案是对的,不过大家用代码完结的话,那个网站或者每一次都有非常大希望被代码去央浼,那么服务器怎么知道大家是1位,而不是四个浏览器差别的用户呢?

先讲理论部分:首先大家需求代码完毕一个浏览器功用,那么模块基本上可以分明urllib.parse、urllib.request,那八个包都以和网址有关的模块,那么大家去登入八个网站,特别是有验证码这个的网站,大家登六进去是否就行了?答案是对的,不过大家用代码落成的话,那一个网址恐怕每便都有非常的大希望被代码去哀求,那么服务器怎么了然大家是1个人,而不是多少个浏览器差别的用户呢?

此时cookie就尤其主要了,在代码中安装好cookie,那么对方服务器自然就知晓大家是壹人,相比较服务器都以那样区分的。python三中
cookie这一个意义是封装在http.cookiejar那一个模块之内。好了,代码如下:

这时cookie就不行重要了,在代码中装置好cookie,那么对方服务器自然就知晓大家是一人,相比服务器都以那样区分的。python3中
cookie那一个成效是封装在http.cookiejar那么些模块之内。好了,代码如下:

# coding=utf-8
# author: Jason
# time:2018/1/16 20:00:00
#version:1.0
import urllib.request as ul
import urllib.parse as uz
import http.cookiejar as cookielib
from json import loads
c=cookielib.LWPCookieJar()#先把cookie对象存储为cookiejar的对象
cookie = ul.HTTPCookieProcessor(c)#把cookiejar对象转换为一个handle
opener = ul.build_opener(cookie)#建立一个模拟浏览器,需要handle作为参数
ul.install_opener(opener)#安装一个全局模拟浏览器,代表无论怎么访问都是一个浏览器操作而不是分开获取验证码等msg
# coding=utf-8
# author: Jason
# time:2018/1/16 20:00:00
#version:1.0
import urllib.request as ul
import urllib.parse as uz
import http.cookiejar as cookielib
from json import loads
c=cookielib.LWPCookieJar()#先把cookie对象存储为cookiejar的对象
cookie = ul.HTTPCookieProcessor(c)#把cookiejar对象转换为一个handle
opener = ul.build_opener(cookie)#建立一个模拟浏览器,需要handle作为参数
ul.install_opener(opener)#安装一个全局模拟浏览器,代表无论怎么访问都是一个浏览器操作而不是分开获取验证码等msg

好了,如此一来,大家代码的起先落成已经到位,接下去正是进入网络分析部分

好了,如此壹来,大家代码的起首达成已经做到,接下去正是进入互连网分析部分

率先能够应用google浏览器依旧搜狗浏览器(自身用的搜狗),张开F12,也就是开垦者方式,登612306的报到地址

第3能够选取google浏览器依然搜狗浏览器(自个儿用的搜狗),张开F12,也正是开辟者方式,登61230陆的记名地址

澳门葡京备用网址 23

澳门葡京备用网址 24

五个红圈中第一个是验证码来源,此时大家只须求记录那么些网页(点进去)的详细景况,写入代码个中,python3中urllib.request这一个模块展开既可

五个红圈中第贰个是验证码来源,此时大家只需求记录那些网页(点进入)的详情,写入代码其中,python三中urllib.request那么些模块打开既可

澳门葡京备用网址 25

澳门葡京备用网址 26

澳门葡京备用网址 ,那样就是验证码来源,那么如何用代码捕捉呢?首先大家得以先乱输入密码,乱点验证码,然后大家直接点击登入

诸如此类正是验证码来源,那么什么样用代码捕捉呢?首先大家能够先乱输入密码,乱点验证码,然后大家直接点击登入

澳门葡京备用网址 27

澳门葡京备用网址 28

 

多了一个很新奇的东西,此时,这里便是验证码验证的网站,那么我们是或不是理所应当记录下来呢?很轻巧,到Headers里面就全都看获得了

 

澳门葡京备用网址 29

 

地点十分是服务器验证网站,上面便是大家还原给她的事物,那么那些1六三,1二1事实上便是自己乱点的验证码坐标了。至于为啥是坐标,因为它是用鼠标去点图片,那么他只恐怕是记录坐标,除非她自身搞了1套人工智能验证图片,但听别人说他几年前仿佛此玩了,人工智能根本未曾怎么起来,他本来只好是最原始的才干而已。

多了三个很稀奇的东西,此时,这里就是验证码认证的网站,那么咱们是否相应记录下来呢?很简单,到Headers里面就全都看得到了

那么这表示了他是先表明验证码,那么评释密码的在哪?自然是急需验证码那关能过,那大家输七个科学的验证码,再写个错密码,登入

澳门葡京备用网址 30

澳门葡京备用网址 31

上边拾叁分是服务器验证网站,上面便是我们苏醒给她的事物,那么这一个1六三,1二1其实正是本身乱点的验证码坐标了。至于为啥是坐标,因为它是用鼠标去点图片,那么他只或者是记录坐标,除非他本人搞了1套人工智能验证图片,但依据他几年前就像此玩了,人工智能根本未曾怎么开始,他自然只能是最原始的才具而已。

此刻能够看来,和验证码同样的措施,大家的死灰复燃与认证都在那多少个圈了,还记得上边验证码失利的时候回复给大家的code是或不是有个数字?那么些也很重视,那么能够看看大家的表明成功的验证码再次来到给我们的是怎么事物

那正是说那意味着了她是先验证验证码,那么注解密码的在哪?自然是亟需验证码那关能过,那大家输1个毋庸置疑的验证码,再写个错密码,登入

澳门葡京备用网址 32

澳门葡京备用网址 33

这一次我们看出了,验证码成功,展现是四,好,那咱们不就能够展开标准剖断了么?

那时得以见到,和验证码同样的办法,我们的上升与认证都在那多少个圈了,还记得下边验证码战败的时候回复给大家的code是还是不是有个数字?那些也很重大,那么能够看看我们的印证成功的验证码重返给大家的是何许东西

那就是说什么样展开四个网站然后把大家点的东西一块发过去吧?上代码

澳门葡京备用网址 34

headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36'}#先写个头,表示我这是浏览器用户登录而不是代码登录,如果不写,代码默认用的签名之类的是编程语言的标识,这样对方服务器很容易就发现你是个脚本了


def get_code():#获取验证码的步骤
  req = ul.Request('https://kyfw.12306.cn/passport/captcha/captcha-image?login_site=E&module=login&rand=sjrand&0.6758635422370105')
  req.headers = headers
  code_file = opener.open(req).read()#此时为浏览器的open而不再是ul.urlopen,下同
  with open(r'C:\Users\Administrator\Desktop\12306自动抢票\code.png','wb')as f:
    f.write(code_file)

此番大家来看了,验证码成功,展现是4,好,那我们不就足以张开规范决断了么?

把验证码直接下载后方计算机上,前面要坐标只须求打开这几个图既可输入,坐标的输入方式本人用字典表示给我们看{一:(四伍,四伍)}{二:(120,四五)}{3:(180,45)}{4:(25五,肆5)}{5:(四五,120)}{6:(120,120)}{七:(180,120)}{8:(25五,120)}

 

依靠那么些验证码的排序,作者深信读者应当掌握各类怎么来的吗,比较坐标就能够懂了。

那正是说哪些开发一个网址然后把大家点的东西一块发过去吗?上代码

继续

headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36'}#先写个头,表示我这是浏览器用户登录而不是代码登录,如果不写,代码默认用的签名之类的是编程语言的标识,这样对方服务器很容易就发现你是个脚本了

def get_code():#获取验证码的步骤
    req = ul.Request('https://kyfw.12306.cn/passport/captcha/captcha-image?login_site=E&module=login&rand=sjrand&0.6758635422370105')
    req.headers = headers
    code_file = opener.open(req).read()#此时为浏览器的open而不再是ul.urlopen,下同
    with open(r'C:\Users\Administrator\Desktop\12306自动抢票\code.png','wb')as f:
        f.write(code_file)
def main_():
  get_code()
  code = input('输入验证码:')
  req = ul.Request('https://kyfw.12306.cn/passport/captcha/captcha-check')
  req.headers = headers

  data = {
    'answer':code,
    'login_site':'E',
    'rand':'sjrand'
  }
  data = uz.urlencode(data).encode()#把字典转换为URL query string,此时是str,要把它变为byts。

  html = opener.open(req,data= data).read().decode()#读取出来是byts格式,转换为‘utf-8(默认)
  print(html)
  result = loads(html)
  if result['result_code']=='4':
    print('验证码通过')
    rep = ul.Request('https://kyfw.12306.cn/passport/web/login')
    rep.headers = headers
    data = {'username':'这里就是你用户名',
        'password':'这里就是你的密码',
        'appid':'otn'
    }
    data = uz.urlencode(data).encode() #看到了吗,这就是你给服务器回复的东西

    html1 = opener.open(rep,data = data ).read().decode()
    result1 = loads(html1)
    if result1['result_code'] == 0:
      print('账户密码验证通过')
    else:
      print(result1['result_message'])

  else:
    print('验证码校验失败,重来')


if __name__ == '__main__':
  main_()

把验证码直接下载后方计算机上,后边要坐标只供给展开那么些图既可输入,坐标的输入格局本人用字典表示给我们看{一:(四伍,肆伍)}{二:(120,45)}{3:(180,肆伍)}{四:(25伍,四5)}{五:(四五,120)}{陆:(120,120)}{7:(180,120)}{八:(25五,120)}

那时,大家就过了验证码密码那壹关,后边是或不是又要查票?那么等同的章程,咱们就足以就那样推算到最后一步,这里就不一一贴代码了

听他们讲这一个验证码的排序,小编相信读者应当清楚各样怎么来的吧,相比较坐标就能够懂了。

ps:查代码这几步的消息但是很要紧喔,大家要把它记录好,并且那中间的新闻包罗了各样作为新闻以及她们的逐壹,多测试四次中央都能搞出来,这里正是提醒一点

继续

澳门葡京备用网址 35

def main_():
    get_code()
    code = input('输入验证码:')
    req = ul.Request('https://kyfw.12306.cn/passport/captcha/captcha-check')
    req.headers = headers

    data = {
        'answer':code,
        'login_site':'E',
        'rand':'sjrand'
    }
    data = uz.urlencode(data).encode()#把字典转换为URL query string,此时是str,要把它变为byts。

    html = opener.open(req,data= data).read().decode()#读取出来是byts格式,转换为‘utf-8(默认)
    print(html)
    result = loads(html)
    if result['result_code']=='4':
        print('验证码通过')
        rep = ul.Request('https://kyfw.12306.cn/passport/web/login')
        rep.headers = headers
        data = {'username':'这里就是你用户名',
                'password':'这里就是你的密码',
                'appid':'otn'
        }
        data = uz.urlencode(data).encode() #看到了吗,这就是你给服务器回复的东西

        html1 = opener.open(rep,data = data ).read().decode()
        result1 = loads(html1)
        if result1['result_code'] == 0:
            print('账户密码验证通过')
        else:
            print(result1['result_message'])

    else:
        print('验证码校验失败,重来')


if __name__ == '__main__':
    main_()

找找规律,然后用split的不二诀要完全就能够切割出来,然后叁个巡回,就足以得到第多少个因素是大家要的,那么前面就可以注解判别再次来到值假使是无,就没票能够继承查询,直到有票就足以下一步;

那时候,我们就过了验证码密码那一关,前面是或不是又要查票?那么同样的章程,我们就可以由此及彼到最终一步,这里就不一一贴代码了

那便是说有票的话,前边同样也是就那样类推的秘技,代码笔者就不复发了,很简短,小编就把前边出现供给请求的网站都爆发来供我们观摩

ps:查代码这几步的消息可是很关键喔,大家要把它记录好,并且那之中的音讯包涵了种种作为消息以及她们的1一,多测试五遍中央都能搞出来,这里正是投砾引珠一点

询问车票新闻

澳门葡京备用网址 36

url = 'https://kyfw.12306.cn/otn/leftTicket/queryZ?leftTicketDTO.train_date=%s&leftTicketDTO.from_station=%s&leftTicketDTO.to_station=%s&purpose_codes=ADULT'%(train_data,from_station,to_station)


req = ul.Request('https://kyfw.12306.cn/otn/leftTicket/submitOrderRequest')#确定订单信息
req = ul.Request("https://kyfw.12306.cn/otn/confirmPassenger/initDc")#验证订单
req = ul.Request('https://kyfw.12306.cn/otn/confirmPassenger/getPassengerDTOs')#准备跨到下单中的过度
req = ul.Request('https://kyfw.12306.cn/otn/confirmPassenger/checkOrderInfo')#检查订单信息
req = ul.Request('https://kyfw.12306.cn/otn/confirmPassenger/getQueueCount')#信息提交给服务器,准备进入下单步骤
req = ul.Request('https://kyfw.12306.cn/otn/confirmPassenger/confirmSingleForQueue')#正式进入下单步骤
req = ul.Request('https://kyfw.12306.cn/otn/confirmPassenger/queryOrderWaitTime?random=%s&tourFlag=dc&_json_att=&REPEAT_SUBMIT_TOKEN=%s'%(numb,time.time()))#下单确认中,此时这个网址一般是进行两次访问,不知为何,我还是做了两次访问,numb是前面查询车票点击预定回复我们的信息中的一条,有点难找喔,我曾经找了三天。。。当然是因为自己不仔细而已
zreq = ul.Request("https://kyfw.12306.cn/otn/confirmPassenger/resultOrderForDcQueue")#最后的结果回执,如果一切都顺利,那么票就已经订了。我一般是打印他返回的内容
'''
      zreq = ul.Request("https://kyfw.12306.cn/otn/confirmPassenger/resultOrderForDcQueue")
      zreq.headers = headers
      data ={"REPEAT_SUBMIT_TOKEN":"%s"%numb,
          "_json_att": "",
          "orderSequence_no":orderId
          }
      data = uz.urlencode(data).encode()
      html = opener.open(zreq,data=data).read().decode()
      result = loads(html)
      print('代码全部过完,回去登录下是否搞定')
      print(result)
      print(result['data']['submitStatus'])
      if result['data']['submitStatus'] == True:
        print('购票成功')
        return True
      else:
        print('购票失败,重试其他列车')
        continue
'''
最终的回执代码详细 信息,读者可以自己尝试多次,得到自己的回复代码确认是否购票成功,因为result['data']['submitStatus']==True只不过是确认订单状态而已,这个被我改动过,你可以多次尝试

 

终极的结尾,高铁票预定成功只有贰拾八秒钟支付时间,所以小编为了以免万壹订好票然则自身人不在,特意写了qq邮件布告

 找找规律,然后用split的秘技完全就足以切割出来,然后1个循环,就足以博得第多少个要素是我们要的,那么后边就足以注脚决断再次回到值假如是无,就没票能够延续查询,直到有票就能够下一步;

qq邮件通告:

那正是说有票的话,后边同样也是就那样推算的主意,代码小编就不复发了,非常的粗略,作者就把后边出现需求请求的网站都产生来供我们观摩

def email():#这是我订票后给自己发邮件的函数
  import smtplib
  from email.mime.text import MIMEText
  import time
  text = '已经为%s抢到票,速度登录12306付款,用户名:%s,密码:%s'%(NAME,username,password)
  msg = MIMEText(text, 'plain', 'utf-8')
  msg_From = '2059****16@qq.com'
  msg_To = '5043****75@qq.com'#是的,我有两个qq,一个发一个收
  smtpSever = 'smtp.qq.com' # qq邮箱的smtp Sever地址
  smtpPort = '465' # 开放的端口
  sqm = 'q********eghe' # 在登录smtp时需要login中的密码应当使用授权码而非账户密码
  msg['from'] = msg_From
  msg['to'] = msg_To
  msg['subject'] = 'Python自动邮件-%s' % time.ctime()
  smtp = smtplib
  smtp = smtplib.SMTP_SSL()
  '''
  smtplib的connect(连接到邮件服务器)、login(登陆验证)、sendmail(发送邮件)
  '''
  smtp.connect(smtpSever, smtpPort)
  smtp.login(msg_From, sqm)
  smtp.sendmail(msg_From, msg_To, str(msg))
  # s = smtplib.SMTP("localhost")
  # s.send_message(msg)
  smtp.quit()
  print('邮件已发送~你可以安心去玩了')
def emailforcode():#此函数是防止查询有票但12306账号掉线人不在无法订票的提醒
  import smtplib
  from email.mime.text import MIMEText
  import time
  text = '%s账号下线,速度登录验证12306' % NAME
  msg = MIMEText(text, 'plain', 'utf-8')
  msg_From = '205****516@qq.com'
  msg_To = '50****75@qq.com'
  smtpSever = 'smtp.qq.com' # qq邮箱的smtp Sever地址
  smtpPort = '465' # 开放的端口
  sqm = 'qowa*******ghe' # 在登录smtp时需要login中的密码应当使用授权码而非账户密码
  msg['from'] = msg_From
  msg['to'] = msg_To
  msg['subject'] = 'Python自动邮件-%s' % time.ctime()
  smtp = smtplib
  smtp = smtplib.SMTP_SSL()
  '''
  smtplib的connect(连接到邮件服务器)、login(登陆验证)、sendmail(发送邮件)
  '''
  smtp.connect(smtpSever, smtpPort)
  smtp.login(msg_From, sqm)
  smtp.sendmail(msg_From, msg_To, str(msg))
  # s = smtplib.SMTP("localhost")
  # s.send_message(msg)
  smtp.quit()
  print('邮件已发送~')

询问车票音讯

那样就马到成功了。

url = 'https://kyfw.12306.cn/otn/leftTicket/queryZ?leftTicketDTO.train_date=%s&leftTicketDTO.from_station=%s&leftTicketDTO.to_station=%s&purpose_codes=ADULT'%(train_data,from_station,to_station)

无法发完整的代码(本人目标就是为着本事交流而已,幸免懒人盗码乱搞),可是本人信任各位开采中的朋友们即便有逻辑,有始发,只要自个儿肯入手,都得以协应用研商究出来,举1反三。毕竟作者正是如此搞出来的,作者一直都相信,只要肯学,都会学会,只要肯做,都能够做成。

 

总结

req = ul.Request('https://kyfw.12306.cn/otn/leftTicket/submitOrderRequest')#确定订单信息
req = ul.Request("https://kyfw.12306.cn/otn/confirmPassenger/initDc")#验证订单
req = ul.Request('https://kyfw.12306.cn/otn/confirmPassenger/getPassengerDTOs')#准备跨到下单中的过度
req = ul.Request('https://kyfw.12306.cn/otn/confirmPassenger/checkOrderInfo')#检查订单信息
req = ul.Request('https://kyfw.12306.cn/otn/confirmPassenger/getQueueCount')#信息提交给服务器,准备进入下单步骤
req = ul.Request('https://kyfw.12306.cn/otn/confirmPassenger/confirmSingleForQueue')#正式进入下单步骤
req = ul.Request('https://kyfw.12306.cn/otn/confirmPassenger/queryOrderWaitTime?random=%s&tourFlag=dc&_json_att=&REPEAT_SUBMIT_TOKEN=%s'%(numb,time.time()))#下单确认中,此时这个网址一般是进行两次访问,不知为何,我还是做了两次访问,numb是前面查询车票点击预定回复我们的信息中的一条,有点难找喔,我曾经找了三天。。。当然是因为自己不仔细而已
zreq = ul.Request("https://kyfw.12306.cn/otn/confirmPassenger/resultOrderForDcQueue")#最后的结果回执,如果一切都顺利,那么票就已经订了。我一般是打印他返回的内容
'''
            zreq = ul.Request("https://kyfw.12306.cn/otn/confirmPassenger/resultOrderForDcQueue")
            zreq.headers = headers
            data ={"REPEAT_SUBMIT_TOKEN":"%s"%numb,
                   "_json_att": "",
                   "orderSequence_no":orderId
                   }
            data = uz.urlencode(data).encode()
            html = opener.open(zreq,data=data).read().decode()
            result = loads(html)
            print('代码全部过完,回去登录下是否搞定')
            print(result)
            print(result['data']['submitStatus'])
            if result['data']['submitStatus'] == True:
                print('购票成功')
                return True
            else:
                print('购票失败,重试其他列车')
                continue
'''
最终的回执代码详细 信息,读者可以自己尝试多次,得到自己的回复代码确认是否购票成功,因为result['data']['submitStatus']==True只不过是确认订单状态而已,这个被我改动过,你可以多次尝试

如上所述是作者给大家介绍的python达成12306抢票及机动邮件发送提示付款成效,希望对我们有着补助,要是我们有其余疑问请给本身留言,我会及时回复大家的。在此也万分多谢我们对台本之家网址的支持!

末尾的末尾,火车票预定成功只有27分钟支付时间,所以小编为了防卫订好票不过本人人不在,特意写了qq邮件布告

您可能感兴趣的篇章:

  • python模块smtplib完毕纯文本邮件发送作用
  • python邮件发送smtplib使用详解
  • Python达成的查询mysql数据库并透过邮件发送新闻功用
  • Python完毕定时备份mysql数据库并把备份数据库邮件发送
  • python达成全自动发送邮件发送四个人、群发、多附属类小部件的以身作则
  • 行使python实现轻易的邮件发送客户端示例
  • python定期利用QQ邮件发送天气预先报告的实例
  • python达成SMTP邮件发送功效
  • python使用smtplib模块通过gmail完毕邮件发送的主意
  • python三.肆贯彻邮件发送功效

qq邮件通告:

def email():#这是我订票后给自己发邮件的函数
    import smtplib
    from email.mime.text import MIMEText
    import time
    text = '已经为%s抢到票,速度登录12306付款,用户名:%s,密码:%s'%(NAME,username,password)


    msg = MIMEText(text, 'plain', 'utf-8')
    msg_From = '2059****16@qq.com'
    msg_To = '5043****75@qq.com'#是的,我有两个qq,一个发一个收

    smtpSever = 'smtp.qq.com'  # qq邮箱的smtp Sever地址
    smtpPort = '465'  # 开放的端口
    sqm = 'q********eghe'  # 在登录smtp时需要login中的密码应当使用授权码而非账户密码

    msg['from'] = msg_From
    msg['to'] = msg_To
    msg['subject'] = 'Python自动邮件-%s' % time.ctime()
    smtp = smtplib
    smtp = smtplib.SMTP_SSL()
    '''
    smtplib的connect(连接到邮件服务器)、login(登陆验证)、sendmail(发送邮件)
    '''
    smtp.connect(smtpSever, smtpPort)
    smtp.login(msg_From, sqm)
    smtp.sendmail(msg_From, msg_To, str(msg))
    # s = smtplib.SMTP("localhost")
    # s.send_message(msg)
    smtp.quit()
    print('邮件已发送~你可以安心去玩了')

def emailforcode():#此函数是防止查询有票但12306账号掉线人不在无法订票的提醒
    import smtplib
    from email.mime.text import MIMEText
    import time
    text = '%s账号下线,速度登录验证12306' % NAME

    msg = MIMEText(text, 'plain', 'utf-8')
    msg_From = '205****516@qq.com'
    msg_To = '50****75@qq.com'

    smtpSever = 'smtp.qq.com'  # qq邮箱的smtp Sever地址
    smtpPort = '465'  # 开放的端口
    sqm = 'qowa*******ghe'  # 在登录smtp时需要login中的密码应当使用授权码而非账户密码

    msg['from'] = msg_From
    msg['to'] = msg_To
    msg['subject'] = 'Python自动邮件-%s' % time.ctime()
    smtp = smtplib
    smtp = smtplib.SMTP_SSL()
    '''
    smtplib的connect(连接到邮件服务器)、login(登陆验证)、sendmail(发送邮件)
    '''
    smtp.connect(smtpSever, smtpPort)
    smtp.login(msg_From, sqm)
    smtp.sendmail(msg_From, msg_To, str(msg))
    # s = smtplib.SMTP("localhost")
    # s.send_message(msg)
    smtp.quit()
    print('邮件已发送~')

那样就马到成功了。

 

无法发完整的代码(自身目标正是为伊始艺调换而已,防止懒人盗码乱搞),可是自个儿信任各位开辟中的朋友们假诺有逻辑,有始发,只要自身肯入手,都得以协科学商量究出来,举壹反三。终究作者便是如此搞出来的,笔者平素都相信,只要肯学,都会学会,只要肯做,都能够做成。

 

好了,人生苦短,作者用python,笔者是一枚土木人转行搞开采的小白。一切全靠自学,一同加油,共勉~

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website