本文基于華為商城的搶單工具,講解一下python3.9的selenium webdriver使用,網(wǎng)上也有相關(guān)的資料,但在自己動手做的過程中還是遇到了一些波折,想拿出來跟大家一起分享。開篇先放個圖:
主要從三個大方面說明:開發(fā)環(huán)境搭建、工程打包、過程中所遇問題整理
話不多說,從頭開捋:
一、開發(fā)環(huán)境搭建
1、 git代碼clone:
假設(shè)clone后的工程路徑為:D:\WorkSpace\MyPython\huawei_seckill,以下基于此路徑展開說明,當(dāng)前工程面向win10的64位(win7兼容處理后續(xù)有說明),代碼地址:
https://gitee.com/lykiao/huawei_seckill.git
2、 工程文件夾為外層的huawei_seckill,其中入口文件為【huawei_seckill.py】,實際主代碼文件為【huawei_seckill_module.py】,包了一層的原因是對主代碼進(jìn)行了加密用,后續(xù)會一一講解。
3、 創(chuàng)建虛擬環(huán)境:
Ide(PyCharm)的命令行或cmd,cd到工程文件夾,執(zhí)行命令python -m venv venv39,生成虛擬環(huán)境。
注:因為使用的python版本為3.9版,為了便于識別,所以起名為venv39(不強(qiáng)求,可隨意起)。強(qiáng)烈推薦使用虛擬環(huán)境,因為工程不同,考慮兼容性,各庫的使用版本就會不同,如果全部使用全局環(huán)境,切換工程時會遇到各種意想不到的問題。
如果創(chuàng)建成功,則會在工程文件夾下生成虛擬環(huán)境venv39:
4、 激活虛擬環(huán)境:
同步驟3,cd到工程文件夾,執(zhí)行命令.\venv39\Scripts\activate,行首顯示(venv39)則表示已成功激活虛擬環(huán)境,后續(xù)的所有操作都是在此虛擬環(huán)境下進(jìn)行的。
5、 在虛擬環(huán)境下安裝工程的依賴庫:
目前均已導(dǎo)入到【requirements.txt】中,執(zhí)行命令pip install -r requirements.txt進(jìn)行安裝即可。
注:如果工程中依賴庫有所變動,在虛擬環(huán)境下執(zhí)行命令pip freeze > requirements.txt可再次導(dǎo)出。
6、 瀏覽器驅(qū)動安裝:
谷歌Chrome瀏覽器驅(qū)動:
http://chromedriver.storage.googleapis.com/index.html?path=114.0.5735.90/
火狐瀏覽器驅(qū)動:
https://github.com/mozilla/geckodriver/releases/
其他瀏覽器參照以下:
https://blog.csdn.net/catch_dreamer/article/details/109359208
下載解壓后的exe【chromedriver.exe】放到虛擬環(huán)境中python.exe的同級目錄下:D:\WorkSpace\MyPython\ huawei_seckill\venv39\Scripts
放入后一定要關(guān)閉PyCharm,再重啟,否則直接運(yùn)行會找不到driver,火狐【geckodriver.exe】就曾報錯:WARNING: Exception trying to discover geckodriver version: error sending…
注意,以上為開發(fā)環(huán)境的處理方式,打包后火狐瀏覽器還是報錯:ERROR: Message: Unable to obtain driver for firefox using Selenium Manager.; For documentation on this error, please visit: https://www.selenium.dev/documentation/webdriver/troubleshooting/errors/driver_location
直接將火狐驅(qū)動【geckodriver.exe】放到huawei_seckill.exe同級文件夾中即可,谷歌瀏覽器驅(qū)動不需要,但保險起見,也一起放進(jìn)來。后來發(fā)現(xiàn)沒有安裝火狐的機(jī)器這樣也會報錯。此處問題較多,可多試幾次。
7、 開發(fā)環(huán)境中啟動:
PyCharm中,右鍵入口文件,點選Run,或者點擊上方三角符號即可啟動:
注意:如果虛擬環(huán)境指定不正確,可通過以下方式調(diào)整
打開工程的配置:
檢查下拉中是否有本工程創(chuàng)建的venv39,如果有,直接選擇ok即可。我的目前就沒有,所以上圖報了一片紅。
沒有的情況,需要按以下方式添加:
上面步驟3我們已經(jīng)手動生成了虛擬環(huán)境,選擇Existing(存在),會自動指定到工程目錄下的venv39:
如果不存在,選擇New(新建),應(yīng)該類似于步驟3的手動創(chuàng)建動作,我沒試過,主要習(xí)慣了用命令行,之前PyCharm貌似也沒有這個功能吧,有興趣的朋友可以試一下。
點擊OK,返回上一頁面,可以看到已指定好虛擬環(huán)境,再點擊OK即可:
就會發(fā)現(xiàn)剛才的紅色都消失了。小插曲到此結(jié)束,回到剛才的啟動話題,發(fā)現(xiàn)也能正常啟動了。
如果啟動時報缺少文件的錯誤,請穩(wěn)步二的步驟6中查看。
二、工程打包
以上到運(yùn)行成功為止,說明開發(fā)環(huán)境已調(diào)試通過,接下來說一下打包。
打包也有很多方式,網(wǎng)上資料很多,復(fù)雜的沒嘗試過,孰好孰壞不能妄加評判,如有需要可自行去搜索看看,目前使用的是比較大眾的pyinstaller庫。
1、 此種方式有單文件打包和多文件打包兩種方式:
單文件打包:
在工程文件夾下執(zhí)行命令:pyinstaller --icon=huawei_seckill.ico --version-file file_version_info.txt --key password -F -w huawei_seckill.py
注:由于單文件打包后,啟動太慢,固使用了多文件打包方式。
多文件打包:
在工程文件夾下執(zhí)行命令:pyinstaller --icon=huawei_seckill.ico --version-file file_version_info.txt --key password -D -w huawei_seckill.py
注:兩種方式的命令只差在-F和-D上,password為打包時的加密密碼,貌似極容易破解,可不用。如果打包報錯,刪除build和dist文件夾后重新打幾次,直到成功為止。
關(guān)于加密設(shè)置,需要在工程文件夾中執(zhí)行命令:pip install pycrypto來安裝pycrypto庫,由于會報以下錯誤,就沒放到requirements.txt中一起安裝,下面是我解決錯誤的方式:
從【C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Tools\MSVC\14.29.30133\include】復(fù)制【stdint.h】到
安裝時報錯路徑【C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\ucrt】下,并且修改該目錄下【inttypes.h】中的
【#include <stdint.h>】為【#include “stdint.h”】,然后重新進(jìn)行安裝即可。
另外,打包指定—key參數(shù)時還需要安裝:pip install tinyaes,已在requirements.txt中包含,無需手動安裝。指定的密碼在使用pyinstxtractor解壓后是可以看到的,形同虛設(shè),所以推薦用下面的pyd混淆方式加密。
2、 由于使用了ddddocr庫,如果打包后運(yùn)行報錯:onnxruntimeerror no_suchfile,可進(jìn)行如下處理
以上打包會在工程文件夾下生成huawei_seckill.spec文件,編輯器打開進(jìn)行以下編輯:
datas = [ ]改為:
datas = [
(‘./venv3/Lib/site-packages/onnxruntime/capi/onnxruntime_providers_shared.dll’,‘onnxruntime\capi’),(‘./venv3/Lib/site-packages/ddddocr/common.onnx’,‘ddddocr’),(‘./venv3/Lib/site-packages/ddddocr/common_old.onnx’,‘ddddocr’)
]
3、 如果打包后exe的icon圖標(biāo)不顯示,也需要對huawei_seckill.spec文件進(jìn)行編輯:
pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)行以下添加以下代碼:
#// 添加exe圖標(biāo)顯示
a.datas += [(‘huawei_seckill.ico’, ‘huawei_seckill.ico’, ‘Data’)]
如圖:
4、 以上huawei_seckill.spec文件修改后,需要重新打包,將build和dist文件夾刪除,現(xiàn)在在工程文件夾下執(zhí)行以下打包命令即可:
pyinstaller huawei_seckill.spec
5、 預(yù)防反編譯處理:
以上為未進(jìn)行防止反編譯時的打包方式,如果對以上打包生成的exe進(jìn)行反編譯,比如使用以下的pyinstxtractor工程,會生成.pyc文件,再進(jìn)一步還原出py文件,源代碼可謂是一覽無余,有興趣的可以去試試:https://github.com/extremecoders-re/pyinstxtractor
為了盡量的防止代碼泄露,可使用Cython庫對代碼進(jìn)行pyd混淆加密,過程需要用到build_pyd.py文件,在工程文件夾中已添加。只需要在工程文件夾下執(zhí)行命令:
python build_pyd.py build_ext –inplace
會將要加密的文件生成相應(yīng)的pyd文件:
huawei_seckill_module.cp38-win_amd64.pyd => huawei_seckill_module.pyd
lock.cp38-win_amd64.pyd => lock.pyd
order_logger.cp38-win_amd64.pyd => order_logger.pyd
然后,按以上方式手動改名為右側(cè)的名字(同.py原文件名)。
至此,再回到步驟4中,重新執(zhí)行打包命令:pyinstaller huawei_seckill.spec即可。
在此說明一下,因為生成的pyd文件不能直接執(zhí)行,需要被調(diào)用,所以才會出現(xiàn)開篇說的將主代碼文件【huawei_seckill_module.py】剝離出來,用入口文件【huawei_seckill.py】調(diào)用(入口文件相對簡單,不加密也無所謂)。
還有一點一定要注意,因為py和pyd同時存在時,會優(yōu)先引入pyd文件,所以經(jīng)過以上混淆和改名后,打包使用的肯定是pyd文件,如果回頭再進(jìn)行開發(fā)調(diào)試時,一定不要忘記把pyd文件刪除,否則不管怎么改py文件都無法看到效果的,因為pyd文件被優(yōu)先執(zhí)行了,這對我一小白來說是血的教訓(xùn)!
6、 打包后整理:
在工程文件夾中,還有一個文件夾huaweiTool,因為使用的是多文件打包方式,從一堆文件里找到exe,還需要ini等各種文件,對用戶來說顯得太繁瑣,所以此文件夾主要是面向用戶使用的。當(dāng)然,開發(fā)環(huán)境運(yùn)行時也需要從此文件夾復(fù)制相應(yīng)的文件使用。
a)、開發(fā)運(yùn)行時:
將D:\WorkSpace\MyPython\huawei_seckill\huaweiTool\huawei_seckill中的文件復(fù)制到工程文件夾下(D:\WorkSpace\MyPython\huawei_seckill)
b)、打包運(yùn)行后運(yùn)行時:
將打包后D:\WorkSpace\MyPython\huawei_seckill\dist\huawei_seckill中的文件復(fù)制到D:\WorkSpace\MyPython\huawei_seckill\huaweiTool\huawei_seckill中,然后雙擊執(zhí)行D:\WorkSpace\MyPython\huawei_seckill\huaweiTool\addShotcut.bat文件,即可對所有快捷方式進(jìn)行更新,此后的操作只需要在huaweiTool文件夾中進(jìn)行。修改【config.ini】和【order.ini】文件后,點擊【huawei_seckill.exe】即可啟動了。
注:check_env.bat可能不需要,暫且無視??赡躻indows的defender會報病毒,可穩(wěn)步【addDefenderExclusion】文件夾中執(zhí)行相關(guān)bat,添加信任文件夾來解決。
三、過程中所遇問題整理
1、Pillow庫報錯:
使用時發(fā)現(xiàn)報錯:
File “D:\WorkSpace\MyPython\huawei_seckill\venv39\lib\site-packages\ddddocr_init_.py”, line 1614, in classification
image = image.resize((int(image.size[0] * (64 / image.size[1])), 64), Image.ANTIALIAS).convert(‘L’)
AttributeError: module ‘PIL.Image’ has no attribute ‘ANTIALIAS’
控制臺中pip list查看Pillow的版本為10.0.0,可能是最新版與ocr中的版本沖突,可修改ocr,也可降級Pillow,參照鏈接:https://blog.csdn.net/light2081/article/details/131517132
本工程已做降級處理,使用requirements.txt中的9.5.0即可
2、啟動成功,但chromedriver彈窗報錯:handshake failed; returned -1, SSL error code 1, net_error -200
添加options參數(shù),參照:
https://www.fyovo.com/6681.html
本工程代碼已添加。
3、打包后,chromedriver會顯示黑色彈窗,需要如下非表示處理:
修改【D:\WorkSpace\MyPython\huawei_seckill\venv39\Lib\site-packages\selenium\webdriver\common\service.py】
添加:from subprocess import CREATE_NO_WINDOW
找到:_start_process方法,修改【creationflags=self.creation_flags】為:creationflags=CREATE_NO_WINDOW,無creationflags時添加即可
注意,此項是對安裝庫的代碼進(jìn)行修改,所以本工程代碼中無法處理,需要自行手動修改后再打包。
4、一定不要忘了把瀏覽器驅(qū)動【chromedriver.exe、geckodriver.exe】放到【D:\WorkSpace\MyPython\ huawei_seckill \venv39\Scripts】中再打包,否則啟動報錯。
5、如果開發(fā)環(huán)境中運(yùn)行報win32api相關(guān)的錯誤,請將PyCharm重啟一次再運(yùn)行。
6、如果想同時兼容win7的64位,需要將python降至3.8.10版,此為兼容win7的最后一版python3(雖然還存在3.8.17,但已不提供installer文件了,只有源碼)。
附3.8.10版的下載地址:
https://www.python.org/downloads/release/python-3810/
7、win7中報onnxruntime庫相關(guān)的錯,目前使用的是1.16.0版,需要對其進(jìn)行手動降至1.14.0版即可解決:
參照方案:https://github.com/microsoft/onnxruntime/issues/16116
執(zhí)行命令:
pip uninstall onnxruntime
pip install onnxruntime==1.14.0文章來源:http://www.zghlxwxcb.cn/news/detail-845832.html
原創(chuàng)不易,您的關(guān)注和點贊就是我前進(jìn)的動力~文章來源地址http://www.zghlxwxcb.cn/news/detail-845832.html
到了這里,關(guān)于基于華為商城的搶單工具python3.9的selenium webdriver使用及打包的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!