1. 程式人生 > >Python+Splinter實現簡單12306自動重新整理搶票

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;

D:\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.執行命令python setup.py install
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
         3.驗證Splinter是否安裝成功

            在python模式下輸入命令:from splinter.browser import Browser,如果沒有報錯,則說明安裝成功

第三,執行py原始碼(https://github.com/fmc088/python12306.git)

        1.這裡要下載chromedriver驅動檔案

         chromedriverchrome對映表,參考文章: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