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サイトに登録したいです。ログインする時はユーザー名とパスワードを入力して、卵痛の検証コードを入力してから、スタート、タイム、列車の種類を選択して、検索をクリックしてから、列車の順番を選択して、乗客は注文書を提出します。このようなマニュアルで操作したら、切符はもうなくなりました。
備考:太字は全部列車の切符を買う属性です。
目標を実現する
全体の流れは自動的に登録され、自動的に検索され、自動的に注文書を提出されます。(自動クリックの検証コードを実現していません。検証コードの成功率は低いです。)
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。
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()
完全なソースコード:リンク先以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。