Pythoon 3.6+splinterに基づいて自動で列車の切符を奪い取ることを実現します。


この文章の実例はみんなにpythonが自動列車の切符を奪い取ることを実現することを共有しました。
splinter使用
まず、splinterの使用を紹介します。
plinter.browerはオープンソースツールで、Python自動化テストwebを通して、コンピュータを通じて自動的にウェブページを操作します。
Splinterモジュールはpython eggです。ダウンロードはもちろん簡単です。インストール:pip install splinter
また、ブラウザの駆動が必要です。SplinterのBrowser類はデフォルトでファーストコールの駆動はfirefoxですので、chromeを使う場合はBrowserを初期化する際にdriver_を指定する必要があります。name=「chrome」パラメータは、ブラウザを明確に指定することを提案します。
注意:Chromeの駆動chromedriverは、バージョンに注意して対応してください。でないと、基本的にunknown errorがあります。ブラウザを開けません。
splinter.brower基礎知識
Browserのインスタンスを作成すると、対応するブラウザが開きます。
visit:だから名前が不思議で、指定サイトにアクセスします。
findbyid(コントロールのid).first:コントロールの属性IDによってコントロールが見つかります。そうではなく、Splinter appiはまたbyname、byid、by_を提供します。などの方法!ファーストは、最初に見つけたコントロールを返すことを表します。
fill(「塗りつぶしたい内容」):指定された内容で対応するコントロールを塗りつぶします。
コントロールとは、データと方法をパッケージ化することです。コントロールは自分の属性と方法を持つことができます。属性はコントロールデータの簡単な訪問者です。方法はコントロールのいくつかの簡単で可視な機能です。コントロール作成プロセスは設計、開発、調整(いわゆる3 DS開発プロセス、つまりDesign、Develop、Debug)作業を含みます。そしてコントロールの使用です。
デザインコントロールは重い仕事です。自分でコントロールを開発することとコントロールを使った可視化プログラムの開発には大きな違いがあります。コントロールを作成する最大の意味は、パッケージが重複する作業であり、次に既存のコントロールの機能を拡張することである。
click():コントロールをクリックする
登録後、browser.co okies.allに今回登録したcookie情報(dictタイプ)を保存しています。プリントアウトしたり、次の使用を保存したりできます。
quit_browser関数:ユーザーが交互にqを入力してから退出することを要求する。そうでないと、プログラムが走り終わったらそのまま終了します。Browserの例を解放して、quit()メソッドを呼び出して、ブラウザも閉じます。
reload()メソッドは、現在のドキュメントを再読み込みするために使用されます。
構想を実現する
まず私たちは12306サイトに登録したいです。ログインする時はユーザー名とパスワードを入力して、卵痛の検証コードを入力してから、スタート、タイム、列車の種類を選択して、検索をクリックしてから、列車の順番を選択して、乗客は注文書を提出します。このようなマニュアルで操作したら、切符はもうなくなりました。
備考:太字は全部列車の切符を買う属性です。
目標を実現する
全体の流れは自動的に登録され、自動的に検索され、自動的に注文書を提出されます。(自動クリックの検証コードを実現していません。検証コードの成功率は低いです。)

'''
        (  Python3.6+splinter)
Created on 2018 1 15 
@author: liuyazhuang
'''
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 = ['XXX', 'XXX']
  #       ,     :passengers = ['XXX(  )', 'XXX']
  passengers = ['   ']
  #   ,   :'2018-01-20'
  dtime = '2018-01-20'
  #    (   cookie )
  starts = '%u6210%u90FD%2CCDW' #  
  #    (   cookie )
  ends = '%%u5317%u4EAC%u897F%2CBXP' #  
 
  # xb =['   '] 
  # pz=['   ']
 
Buy_Tickets(username, password, order, passengers, dtime, starts, ends).start_buy()
完全なソースコード:リンク先
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。