Python+Splinter實現簡單12306自動重新整理搶票
實現該功能(window)環境:
1.python環境的搭建和安裝;(測試版本是python 3.+)
2.Splinter web測試工具;
第一:python,下載地址:https://www.python.org/ 官網,可以下載3.+版本即可,系統環境配置;(百度搜一下即可)
第二:Splinter 下載安裝
下載地址:https://pypi.python.org/pypi/splinter/ 最新版本0.7.7,window下載下來是tar.gz,直接用window 解壓軟體即可。
1.用window cmd 指定到解壓splinter的位置
2.輸入指令python setup.py build;
3.執行命令python setup.py installD:\splinter-0.7.7\splinter-0.7.7>python setup.py build running build running build_py creating build creating build\lib creating build\lib\splinter copying splinter\browser.py -> build\lib\splinter copying splinter\cookie_manager.py -> build\lib\splinter copying splinter\element_list.py -> build\lib\splinter copying splinter\exceptions.py -> build\lib\splinter copying splinter\meta.py -> build\lib\splinter copying splinter\utils.py -> build\lib\splinter copying splinter\__init__.py -> build\lib\splinter creating build\lib\splinter\driver copying splinter\driver\djangoclient.py -> build\lib\splinter\driver copying splinter\driver\element_present.py -> build\lib\splinter\driver copying splinter\driver\flaskclient.py -> build\lib\splinter\driver copying splinter\driver\lxmldriver.py -> build\lib\splinter\driver copying splinter\driver\zopetestbrowser.py -> build\lib\splinter\driver copying splinter\driver\__init__.py -> build\lib\splinter\driver creating build\lib\splinter\request_handler copying splinter\request_handler\status_code.py -> build\lib\splinter\request_handler copying splinter\request_handler\__init__.py -> build\lib\splinter\request_handler creating build\lib\splinter\driver\webdriver copying splinter\driver\webdriver\chrome.py -> build\lib\splinter\driver\webdriver copying splinter\driver\webdriver\cookie_manager.py -> build\lib\splinter\driver\webdriver copying splinter\driver\webdriver\firefox.py -> build\lib\splinter\driver\webdriver copying splinter\driver\webdriver\phantomjs.py -> build\lib\splinter\driver\webdriver copying splinter\driver\webdriver\remote.py -> build\lib\splinter\driver\webdriver copying splinter\driver\webdriver\__init__.py -> build\lib\splinter\driver\webdriver running egg_info writing splinter.egg-info\PKG-INFO writing dependency_links to splinter.egg-info\dependency_links.txt writing requirements to splinter.egg-info\requires.txt writing top-level names to splinter.egg-info\top_level.txt reading manifest file 'splinter.egg-info\SOURCES.txt' reading manifest template 'MANIFEST.in' no previously-included directories found matching 'tests' writing manifest file 'splinter.egg-info\SOURCES.txt'
3.驗證Splinter是否安裝成功D:\splinter-0.7.7\splinter-0.7.7>python setup.py install running install running bdist_egg running egg_info writing splinter.egg-info\PKG-INFO writing dependency_links to splinter.egg-info\dependency_links.txt writing requirements to splinter.egg-info\requires.txt writing top-level names to splinter.egg-info\top_level.txt reading manifest file 'splinter.egg-info\SOURCES.txt' reading manifest template 'MANIFEST.in' no previously-included directories found matching 'tests' writing manifest file 'splinter.egg-info\SOURCES.txt' installing library code to build\bdist.win32\egg running install_lib running build_py creating build\bdist.win32 creating build\bdist.win32\egg creating build\bdist.win32\egg\splinter copying build\lib\splinter\browser.py -> build\bdist.win32\egg\splinter copying build\lib\splinter\cookie_manager.py -> build\bdist.win32\egg\splinter creating build\bdist.win32\egg\splinter\driver copying build\lib\splinter\driver\djangoclient.py -> build\bdist.win32\egg\splinter\driver copying build\lib\splinter\driver\element_present.py -> build\bdist.win32\egg\splinter\driver copying build\lib\splinter\driver\flaskclient.py -> build\bdist.win32\egg\splinter\driver copying build\lib\splinter\driver\lxmldriver.py -> build\bdist.win32\egg\splinter\driver creating build\bdist.win32\egg\splinter\driver\webdriver copying build\lib\splinter\driver\webdriver\chrome.py -> build\bdist.win32\egg\splinter\driver\webdriver copying build\lib\splinter\driver\webdriver\cookie_manager.py -> build\bdist.win32\egg\splinter\driver\webdriver copying build\lib\splinter\driver\webdriver\firefox.py -> build\bdist.win32\egg\splinter\driver\webdriver copying build\lib\splinter\driver\webdriver\phantomjs.py -> build\bdist.win32\egg\splinter\driver\webdriver copying build\lib\splinter\driver\webdriver\remote.py -> build\bdist.win32\egg\splinter\driver\webdriver copying build\lib\splinter\driver\webdriver\__init__.py -> build\bdist.win32\egg\splinter\driver\webdriver copying build\lib\splinter\driver\zopetestbrowser.py -> build\bdist.win32\egg\splinter\driver copying build\lib\splinter\driver\__init__.py -> build\bdist.win32\egg\splinter\driver copying build\lib\splinter\element_list.py -> build\bdist.win32\egg\splinter copying build\lib\splinter\exceptions.py -> build\bdist.win32\egg\splinter copying build\lib\splinter\meta.py -> build\bdist.win32\egg\splinter creating build\bdist.win32\egg\splinter\request_handler copying build\lib\splinter\request_handler\status_code.py -> build\bdist.win32\egg\splinter\request_handler copying build\lib\splinter\request_handler\__init__.py -> build\bdist.win32\egg\splinter\request_handler copying build\lib\splinter\utils.py -> build\bdist.win32\egg\splinter copying build\lib\splinter\__init__.py -> build\bdist.win32\egg\splinter byte-compiling build\bdist.win32\egg\splinter\browser.py to browser.cpython-36.pyc byte-compiling build\bdist.win32\egg\splinter\cookie_manager.py to cookie_manager.cpython-36.pyc byte-compiling build\bdist.win32\egg\splinter\driver\djangoclient.py to djangoclient.cpython-36.pyc byte-compiling build\bdist.win32\egg\splinter\driver\element_present.py to element_present.cpython-36.pyc byte-compiling build\bdist.win32\egg\splinter\driver\flaskclient.py to flaskclient.cpython-36.pyc byte-compiling build\bdist.win32\egg\splinter\driver\lxmldriver.py to lxmldriver.cpython-36.pyc byte-compiling build\bdist.win32\egg\splinter\driver\webdriver\chrome.py to chrome.cpython-36.pyc byte-compiling build\bdist.win32\egg\splinter\driver\webdriver\cookie_manager.py to cookie_manager.cpython-36.pyc byte-compiling build\bdist.win32\egg\splinter\driver\webdriver\firefox.py to firefox.cpython-36.pyc byte-compiling build\bdist.win32\egg\splinter\driver\webdriver\phantomjs.py to phantomjs.cpython-36.pyc byte-compiling build\bdist.win32\egg\splinter\driver\webdriver\remote.py to remote.cpython-36.pyc byte-compiling build\bdist.win32\egg\splinter\driver\webdriver\__init__.py to __init__.cpython-36.pyc byte-compiling build\bdist.win32\egg\splinter\driver\zopetestbrowser.py to zopetestbrowser.cpython-36.pyc byte-compiling build\bdist.win32\egg\splinter\driver\__init__.py to __init__.cpython-36.pyc byte-compiling build\bdist.win32\egg\splinter\element_list.py to element_list.cpython-36.pyc byte-compiling build\bdist.win32\egg\splinter\exceptions.py to exceptions.cpython-36.pyc byte-compiling build\bdist.win32\egg\splinter\meta.py to meta.cpython-36.pyc byte-compiling build\bdist.win32\egg\splinter\request_handler\status_code.py to status_code.cpython-36.pyc byte-compiling build\bdist.win32\egg\splinter\request_handler\__init__.py to __init__.cpython-36.pyc byte-compiling build\bdist.win32\egg\splinter\utils.py to utils.cpython-36.pyc byte-compiling build\bdist.win32\egg\splinter\__init__.py to __init__.cpython-36.pyc creating build\bdist.win32\egg\EGG-INFO copying splinter.egg-info\PKG-INFO -> build\bdist.win32\egg\EGG-INFO copying splinter.egg-info\SOURCES.txt -> build\bdist.win32\egg\EGG-INFO copying splinter.egg-info\dependency_links.txt -> build\bdist.win32\egg\EGG-INFO copying splinter.egg-info\requires.txt -> build\bdist.win32\egg\EGG-INFO copying splinter.egg-info\top_level.txt -> build\bdist.win32\egg\EGG-INFO zip_safe flag not set; analyzing archive contents... creating dist creating 'dist\splinter-0.7.7-py3.6.egg' and adding 'build\bdist.win32\egg' to it removing 'build\bdist.win32\egg' (and everything under it) Processing splinter-0.7.7-py3.6.egg Copying splinter-0.7.7-py3.6.egg to d:\program files\python36-32\lib\site-packages Adding splinter 0.7.7 to easy-install.pth file Installed d:\program files\python36-32\lib\site-packages\splinter-0.7.7-py3.6.egg Processing dependencies for splinter==0.7.7 Searching for selenium>=3.4.3 Reading https://pypi.python.org/simple/selenium/ Downloading https://pypi.python.org/packages/1a/7d/1e4aadfffc9c0de596839347e29a799c4124987ec6cdb3bcb46fa1970ffa/selenium-3.8.0.t Best match: selenium 3.8.0 Processing selenium-3.8.0.tar.gz Writing C:\Users\ADMINI~1\AppData\Local\Temp\easy_install-21p0zp49\selenium-3.8.0\setup.cfg Running selenium-3.8.0\setup.py -q bdist_egg --dist-dir C:\Users\ADMINI~1\AppData\Local\Temp\easy_install-21p0zp49\selenium-3.8. warning: no files found matching 'selenium\selenium.py' warning: no files found matching 'LICENSE' creating d:\program files\python36-32\lib\site-packages\selenium-3.8.0-py3.6.egg Extracting selenium-3.8.0-py3.6.egg to d:\program files\python36-32\lib\site-packages Adding selenium 3.8.0 to easy-install.pth file Installed d:\program files\python36-32\lib\site-packages\selenium-3.8.0-py3.6.egg Finished processing dependencies for splinter==0.7.7
在python模式下輸入命令:from splinter.browser import Browser,如果沒有報錯,則說明安裝成功
第三,執行py原始碼(https://github.com/fmc088/python12306.git)
1.這裡要下載chromedriver驅動檔案
chromedriver和chrome對映表,參考文章:http://blog.csdn.net/huilan_same/article/details/51896672
chromedriver下載地址:https://chromedriver.storage.googleapis.com/index.html
這裡要翻牆下載chromedriver,介紹幾款翻牆軟體地址:
https://github.com/getlantern/forum/issues/4775
https://github.com/getlantern/forum
2 執行python D:\12306.py 自動下訂單,不足點驗證碼要手動輸入。
D:\splinter-0.7.7\splinter-0.7.7>python D:\12306.py
DevTools listening on ws://127.0.0.1:12024/devtools/browser/fb7e0e32-892d-4a6a-98fe-4e0b38c94345
[0103/155600.945:ERROR:adm_helpers.cc(62)] Failed to querystereo recording.
等待驗證自行輸入...
[2100:5380:0103/155624.890:ERROR:audio_manager_base.cc(275)]Invalid audio output parameters received; using fake audio path. Channels: 0,Sample Rate: 0, Bits Per S
購票頁面開始...
[2100:5380:0103/155625.437:ERROR:audio_manager_base.cc(275)]Invalid audio output parameters received; using fake audio path. Channels: 0,Sample Rate: 0, Bits Per S
迴圈點選查詢... 第 1 次
Message: stale element reference: element is not attached to thepage document
(Session info:chrome=62.0.3202.75)
(Driver info:chromedriver=2.34.522940(1a76f96f66e3ca7b8e57d503b4dd3bccfba87af1),platform=Windows NT 6.1.7601 SP1x86)
還沒開始預訂 1
開始預訂...
開始選擇使用者...
提交訂單...
確認選座...
3.程式碼中要有地址cookies值,查詢方法:
starts = u"%u6DF1%u5733%u5317%2CIOQ"
ends = u"%u53A6%u95E8%u5317%2CXKS"
開啟瀏覽器,按下F12 開發者模式,在出發地,目的地,開發者模式下就有對應的_jc_save_fromStation和_jc_save_toStationvalue值就是地址cookies