前往
大廳
主題

拓元演唱會自動購票

艾倫D索妮雅 | 2021-05-30 15:37:39 | 巴幣 102 | 人氣 2176

今天大致上把一整個自動訂票的程式的流程都寫完了
目前的麻煩是降噪完後,過驗證的成功率還是有點低呀
不過這些之後再解決了ˊ  ˋ,因為感覺這要訓練模組,會花時間....

總之先把程式碼紀錄在GitHub上吧:程式碼
演示:

然後高鐵訂票不寫啦 = =,他的驗證碼好難改
直接先找比較簡單的驗證碼來試作,所以選擇拓元演唱會的驗證碼來玩
大致上改不會花太多時間
只是他的爬圖需要用截圖的方式,若用requests把圖載下來
會因為requests.get()重新訪問網站的關係
讓整個驗證碼圖示變掉,這樣辨識上就會出錯了

所以在存圖+改圖的過程大概會改成
先截圖:
driver.save_screenshot(path)

然後擷取驗證碼的目標位置:
element = driver.find_element_by_xpath("//*[@id='yw0']")
location = element.location                     # 取得圖片 element 的位置
size = element.size                             # 取得圖片 element 的大小
left = location['x']+75                            # 決定上下左右邊界
top = location['y']-370
right = location['x'] + size['width']+100
bottom = location['y'] + size['height']-350
image = Image.open(path)                        # 將 screen load 至 memory
image = image.crop((left,top,right,bottom))       # 根據位置剪裁圖片
image.save('captcha/captcha'+'.png', 'png')       # 重新儲存圖片為 png 格式

然後轉進行圖片調色,把圖明轉暗、暗轉明,變成灰階
順便調整字的傾斜度:
img = cv2.imread('captcha/captcha.png')
imginfo = img.shape #取得圖片size的長寬 (長,寬) ,tuple型態

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) #opencv的彩色轉灰階

height = imginfo[0]
width = imginfo[1]

center = (width//2,height//2) #取得圖片中心位置
M = cv2.getRotationMatrix2D(center,-5,1.0)  #以中心順時鐘旋轉5度,負為順,正為逆;1.0 為縮放
gray1 = cv2.warpAffine(gray,M,(width,height)) #warpAffine為圖片旋轉或平移的式子 參數: 圖檔, 旋轉or平移參數, (長寬)

dst = np.zeros((height, width, 1), np.uint8)

for i in range(height):     #顏色反轉
    for j in range(width):
        grayPixel = 255 - gray1[i, j]
        dst[i, j] = grayPixel

cv2.imwrite('captcha/captcha_gray.png',dst) #OpenCV 圖片儲存的方法

然後用PIL 讓他變成黑白二元圖 (OpenCV其實也能做,但想2個都用用看XD)
picture = Image.open('captcha/captcha_gray.png')
gray = picture.convert('L')

table = []
threshold = 115

for i in range(256):
    if i < threshold:
        table.append(0)
    else:
        table.append(1)

binary = gray.point(table,'1')
binary.save('captcha/captcha_binary.png')

之後就是靠tesseract大大去辨識這張圖啦
好吧.....現在還無法辨識到非常完美.....
還要經過訓練,而這部份則需再研究了= =
總之目前就先當這個月目標達成啦
之後要訓練模組的話再找時間了,這個月的專案先這樣ˊ ˋ
坑先留著Wwwwww

然後我要來看實教和地下城小說啦~
最近好少看輕小說了,結果一轉眼發現出到最新
趕快來看個~

貝爾好帥呀~~~~~~~


好啦~這個月剩餘時間來個耍廢看動漫、輕小說、電影、日劇
下個月開始,來寫遊戲和畫遊戲圖啦(ˊ  w ˋ)
Unity3D和C#都快忘得差不多了,趕快來複習
然後blender........己乎全忘光orz
要來請教師父了ㄆㄆ

創作回應

更多創作