#!/usr/bin/env python3 #-*- coding:utf-8 -*- import os,sys,time from splinter import Browser import requests from PIL import Image from json import loads from requests.packages.urllib3.exceptions import InsecureRequestWarning requests.packages.urllib3.disable_warnings(InsecureRequestWarning) from pyvirtualdisplay import Display #12306 deepstuy="https://www.jianshu.com/p/def4f754aa6f" #display = Display(visible=0, size=(300, 300)) #display.start() from PyQt5 import QtWidgets, QtGui app = QtWidgets.QApplication(sys.argv) window = QtWidgets.QWidget(); window.show() sys.exit(app.exec_()) quit() headers = { "User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36" } session = requests.session() def getCheckImgIndex(): url="https://kyfw.12306.cn/passport/captcha/captcha-image?login_site=E&module=login&rand=sjrand" response = session.get(url=url,headers=headers,verify=False) f=open('12306.jpg','wb') f.write(response.content) f.closed img=Image.open('./12306.jpg') img.show() checkindex = input('請輸入驗證碼位置,以","分割(例如2,4,6):') return checkindex def postcheckImage(checkindex): indexs= checkindex.split(',') imgcentor_position = ['35,35','105,35','175,35','245,35','35,105','105,105','175,105','245,105'] checkokList = [] for index in indexs: checkokList.append(imgcentor_position[int(index)]) checkokImgStr = ','.join(checkokList) checkUrl = "https://kyfw.12306.cn/passport/captcha/captcha-check" data = { 'login_site':'E', 'ranf':'sjrand', 'answer':checkokImgStr } response = session.post(url=checkUrl,data=data,headers=headers,verify=False) checkResult=loads(response.content) print(checkResult) checkcode = checkResult['result_code'] print(checkcode,type(checkcode)) if checkcode == '4': print('驗證碼提交成功!') return True else: print('驗證碼提交失敗!') return False def login12306(): username = input('用戶名:') password=input('密碼:') loginUrl = "https://kyfw.12306.cn/passport/web/login" data = { 'username':username, 'password':password, 'appid':'otn' #固定的標誌 } response = session.post(url=loginUrl,data=data,headers=headers,verify=False) result = loads(response.content) print(result) isLoginOk = result['result_message'] if isLoginOk== "登陸成功": print('登陸成功,能夠購票!') else: print('登陸失敗!') if __name__ == '__main__': imgindex=getCheckImgIndex() check=postcheckImage(imgindex) login12306() quit() class Login(object): def __init__(self): self.name="zhb" self.addr="guangzhou" def Visit(self,url,user,password): browser=Browser(driver_name="chrome") browser.visit(url) time.sleep(3) if browser.is_element_present_by_text('登陸'): print('yes,have 登陸 button') browser.find_by_text('登陸').click() time.sleep(3) if browser.is_element_present_by_text('帳號登陸'): print('yes,have 帳號登陸 button') browser.find_by_text('帳號登陸').click() time.sleep(3) browser.find_by_id('J-userName').fill(user) browser.find_by_id('J-password').fill(password) time.sleep(15) browser.find_by_text('當即登陸').click() time.sleep(30) my=Login() my.Visit("https://www.12306.cn/index/index.html","18****90","*********")