[爆卦]python selenium驗證碼是什麼?優點缺點精華區懶人包

為什麼這篇python selenium驗證碼鄉民發文收入到精華區:因為在python selenium驗證碼這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者kh555069 (yuan)看板Python標題[問題] 用 selenium 搶票時間Wed...


各位大神好
新手如我最近用selenium寫了一個自動輸入個人資料的小爬蟲,只有驗證碼部分是手動輸
入,輸入完驗證碼之後就會自動跑完剩下的流程並完成訂票,code部分只有.get , find_
element , send_key跟click

之前有聽說,只要驗證碼是手動輸入就沒有違法問題,想確認這樣是否真的沒問題,感謝
各位

--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.136.175.54
※ 文章網址: https://www.ptt.cc/bbs/Python/M.1510108792.A.296.html
wennie0433: 這事情我也幹過XD 後來發現人多網站都會掛就懶得用了 11/08 10:45
wennie0433: 應該是沒有違法 除非破解驗證碼 11/08 10:46
neil987: 搶票 就是要做驗證碼識別 不過通常網站掛掉比較無解 11/08 11:05
vi000246: 我之前有去pttlifelaw板問過了 你可以爬文看看 11/08 11:20
f496328mm: 驗證碼識別蠻簡單的,我有做一個 11/08 12:29
kh555069: 之前有看過vi大的討論串,那位回文的大大好像認定這樣是 11/08 13:15
kh555069: 違法 11/08 13:15
uranusjr: 搶票的 bottleneck 從來都不是輸入資料的手速啊... 11/08 16:41
HenryLiKing: 樓上那句是什麼意思呀 11/08 16:58
HenryLiKing: 我查翻譯是 瓶頸 的意思耶(?) 11/08 16:58
swallowcc: 意思就是問題一直都不是在輸入資料的速度R 11/08 19:56
vi000246: 但是開多線程可以賭賭看 一定比手動搶到的機會大 11/08 20:22
fordpines: 驗證碼識別是用pytesser做的? 有點興趣 11/08 22:16
Sunal: 人家網站塞爆你輸入多快也沒用 11/08 22:34
Sunal: 但是如果你用多開 這就有問題了 11/08 22:34
kh555069: 感謝各位大大的回覆,我知道這種程度沒辦法搶演唱會等 11/09 02:22
kh555069: 級的票。能幫家人搶到高鐵票就夠了,我只是想確認搶個2~ 11/09 02:22
kh555069: 3張會不會出事 11/09 02:22
neil987: 高鐵票需要搶嗎QQ 11/09 06:54
kh555069: 要啊QQ 學生票星期六早上本來還有7折時段,現在幾乎沒 11/09 08:58
kh555069: 了QQ。上禮拜買早鳥 一張打折票都搶不到 11/09 08:58
f496328mm: 驗證碼,自己做一個CNN就好了,麻煩的是,驗證碼是JS, 11/09 10:04
f496328mm: 直接抓會一直變,我是用selenium截圖後,再去處理 11/09 10:04
f496328mm: 另外我是手動做train data,目前1萬張 11/09 10:05
goldflower: 這樣標解答好累R 11/09 12:16
f496328mm: 很累啊,我也試過一大堆方法,都有現成套件,但都有些 11/09 13:39
f496328mm: 缺陷,結果都不好,demo時都很猛,實際上不見得好 11/09 13:39
f496328mm: 標解答,也可以寫成程式,盡量提高速度啦,我一開始一 11/09 13:41
f496328mm: 天就可以1萬張,5個驗證碼大約90%正確率,剩下就可以利 11/09 13:41
f496328mm: 用台鐵驗證碼系統,幫我上label啦 11/09 13:41
f496328mm: 簡單講,對或錯台鐵會幫我判定,對的就存label,這樣就 11/09 13:45
f496328mm: 變成自動上label啦,data會越來越多,有點類似reinforc 11/09 13:45
f496328mm: ement learning,當然這很像ddos攻擊,是不太好啦 11/09 13:45
alan23273850: 哇感謝f大開示!這種gen資料的方式太聰明了啦 11/09 15:54
goldflower: 喔喔這蠻聰明的@@ 反正不用把正確率提到最高 自動化 11/09 16:19
goldflower: 比較重要 11/09 16:19
f496328mm: 之後你data越多,基本上準確率越高 11/09 16:23
goldflower: 不過data越多 如果錯的testing沒有標解答進去的話 11/09 18:52
goldflower: 照理說之後看到一樣的驗證碼還是會認錯 因為還是沒學 11/09 18:52
goldflower: 所以應該還是要把錯的驗證碼存下來手動輸入幾個 11/09 18:52
f496328mm: 還有一點是,在辨識之前,你的影像處理好不好,對之後 11/09 19:32
f496328mm: 的辨識,影響很大 11/09 19:32
f496328mm: 另外台鐵算是最簡單的驗證碼,有些連人都很難辨識 11/09 19:32
bluecadence: 餵CNN影像基本上不必處理 頂多丟掉對辨識沒幫助的彩 11/09 20:02
bluecadence: 色 轉成灰階。五個字整張圖餵進去練,99%辨識率很容 11/09 20:05
bluecadence: 易。不要一直餵已經答對的圖案,把辨識錯誤的圖加進 11/09 20:06
bluecadence: 去訓練很重要 11/09 20:07
bluecadence: training set 3000 張基本上就可以 95% 了 11/09 20:07
f496328mm: 是一整張圖辨識?我目前是切割,分開辨識 11/09 20:11
bluecadence: 對不必切割 原圖整張餵 11/09 20:22
f496328mm: 了解,因為切割也很麻煩,台鐵還算可以切,其他的很複 11/09 20:29
f496328mm: 雜 11/09 20:29
bluecadence: 用傳統比對法 才有必要切割, 既然都用 cnn 了,就不 11/09 20:59
bluecadence: 必多此一舉了 :p 11/09 21:00
vi000246: 想問台鐵黏在一起的字怎麼切 想看看演算法 11/09 21:52
vi000246: B大說不用切只要train 3000張 想問有範例嗎 11/09 21:54
vi000246: 我之前找到一篇文章 不用切的話要四萬張才有9X%的成功率 11/09 22:05
vi000246: 而且這驗證碼是自己產生自己訓練的 跟抓別人的驗證碼 11/09 22:05
vi000246: 手動標label的效率差很多 11/09 22:06
neil987: 還是不太理解不切圖的流程... 11/10 00:20
neil987: 求b大解釋大概流程 11/10 00:20
aszx4510: 我猜是用image-to-text吧 先用CNN encoder 接著再使用 11/10 00:44
aszx4510: RNN decoder 產生一串字串 11/10 00:45
aszx4510: 如果可以肯定驗證碼必定五個字 那用傳統CNN分類就好了 11/10 00:45
alan23273850: 獻醜一下,我之前用前處理+數字切割,再每個數字丟 11/10 01:06
alan23273850: 進別人已經用tensorflow訓練好的library去辨識,最 11/10 01:06
alan23273850: 後再合起來,辨識率只有1/8。因為前處理弄得不好, 11/10 01:07
alan23273850: 灰色的noise line其實跟數字很像,這學期正在學電腦 11/10 01:08
alan23273850: 視覺,希望能對前處理改良,應該會有幫助,不過我覺 11/10 01:09
alan23273850: 得還是不會比整張丟進 CNN 下去 train 還要好 11/10 01:09
alan23273850: CNN 真的是一個大家都該會的東西呀...... 11/10 01:10
f496328mm: 單純用CNN做分類的話,5個數字,有10^5種組合耶,況且 11/10 07:00
f496328mm: 有時是4個數字,有時是6個,真的可以不切割? 11/10 07:00
f496328mm: alan,我的數字影像處理,切割+旋轉,之後再用CNN,1萬 11/10 07:10
f496328mm: 張圖,大約80~90%正確率 11/10 07:10
f496328mm: 其實驗證碼的影像處理,網路上一大堆人做過,可以去找 11/10 07:11
f496328mm: 找 11/10 07:11
bluecadence: 如果會切圖只辨識一個字母或數字,要訓練 1~Nmax 字 11/10 08:48
bluecadence: 流程一模一樣,重點是cnn幾層,模型怎麼建的。一般的 11/10 08:50
bluecadence: 網站都是固定字數,可以針對特定網站訓練。 11/10 08:50
bluecadence: 我使用三層 conv layer 一層 fully connected 然後 11/10 08:56
bluecadence: output layer 。 我針對兩個網站都是五個字的圖做解 11/10 08:56
bluecadence: 析,每天抓上千筆資料 真的正確率就是 > 99% 很少看 11/10 08:57
bluecadence: 見錯誤的。我也是寫了這個tensorflow小程式 被 cnn 11/10 08:59
bluecadence: 的威力嚇到 開始小玩tensorflow 11/10 09:00
bluecadence: 文字數字是非常有特徵的物件 辨識真的不難阿... 11/10 09:06
bluecadence: 我不知道各位切圖一個字後怎麼做cnn,我的作法是把 11/10 09:21
bluecadence: 字母數字先向量化,整張圖一維化,然後餵進 nn 這好 11/10 09:22
bluecadence: 像是蠻標準的程序(之一)阿 11/10 09:22
bluecadence: 而且如果需要窮盡所有樣板可能性,才能讓NN學會,你 11/10 09:30
bluecadence: 需要的是一個完整可以比對的資料庫,不是NN 11/10 09:30
bluecadence: NN的概念不就是要舉一反N嗎,而不是舉N反N 11/10 09:31
bluecadence: 我的確相信 NN 在訓練的過程中,把看過的東西都"記憶 11/10 09:38
bluecadence: "下來了(在連結權重的網中),但你給他一張新的沒看過 11/10 09:39
bluecadence: 的五字辨識圖,它的確幫你判斷出來了,這是除了記憶 11/10 09:40
bluecadence: 外,它也歸類了辨識圖中的一些文字數字特徵,然後給 11/10 09:41
bluecadence: 出了正確答案。 11/10 09:41
bluecadence: 神經網路怎麼學習的,最近讀到一個 information 11/10 10:02
bluecadence: bottleneck 的說法,我覺得還蠻有趣的,可以 google 11/10 10:02
bluecadence: 關鍵字參考一下 11/10 10:03
vi000246: 驗證碼有噪線、扭曲、不固定位置、顏色、相黏 11/10 11:33
vi000246: 能直接餵資料的應該是比較簡單的驗證碼吧? 11/10 11:33
vi000246: 或是位置、扭曲都固定 但很難切割的驗證碼 11/10 11:34
bluecadence: http://bsr.twse.com.tw/bshtm/ 11/10 11:35
bluecadence: kerBS.php 11/10 11:36
bluecadence: 我不知道這種算難還是不難? 11/10 11:36
bluecadence: 位置不固定會旋轉我覺得更應該不切割直接餵 11/10 11:44
bluecadence: 這不就是cnn的優點強項嗎? 11/10 11:45
bluecadence: 人臉辨識 不在照片固定位置 角度不同 扭曲 不是都能 11/10 11:46
bluecadence: 作到某種程度了嗎? 11/10 11:46
ron0803: B大是神,好強 11/10 12:14
vi000246: 原來如此 謝謝B大說明 11/10 14:47
f496328mm: 感謝開示 11/11 09:03
f496328mm: 一維化,所以沒有用到pooling? 11/11 09:32
bluecadence: 推文打太快漏了字,一維化然後 reshape (所以還是二 11/11 10:27
bluecadence: 維陣列) 抱歉讓您誤會 11/11 10:28
bluecadence: 另外為什麼我說用有平移旋轉更應該用cnn 請google關 11/11 10:30
bluecadence: 鍵字 translation, rotation invariance + cnn 11/11 10:32
f496328mm: blue大有github可以參考嗎?感恩 11/11 11:23
f496328mm: 問一個問題,圖片本來不是2維嗎?為什麼要先一維化,再 11/11 13:37
f496328mm: 變2維?改變整張圖的大小嗎? 11/11 13:37
bluecadence: 只是配合tensorflow語法保持彈性可以動態指定批次圖 11/11 16:44
bluecadence: 檔數量。我短時間內並沒有把程式碼放在github開源的 11/11 16:46
bluecadence: 打算。 11/11 16:46
f496328mm: ok,那我自己研究看看 11/11 18:36
goldflower: 噪點那些問題在資料量夠多下照理說會自然在訓練的過 11/13 11:24
goldflower: 程中被忽視 所以那些不用太在意 11/13 11:24
goldflower: 不過有前處理做好可能收斂更快吧 11/13 11:24
goldflower: 改變整張圖的大小也行啊 這樣你一個CNN 就能應用在多 11/13 11:25
goldflower: 個網站上 11/13 11:25
goldflower: 不過數字數量不固定的問題可能比較麻煩 但是如果trai 11/13 11:28
goldflower: ning data有這個資訊 那就可以串兩個nn 一個先做好m 11/13 11:28
goldflower: eta learning就能再丟到對應的CNN model 了 11/13 11:28
alan23273850: 順便再推台大李弘毅老師的機器學習課程,專門給初學 11/13 20:33
alan23273850: 者聽的,我這學期正在修,覺得獲益良多,影片都在網 11/13 20:33
alan23273850: 路上,老師常用有趣的比喻說明,完全不會打瞌睡 11/13 20:34
alan23273850: 話說如果圖不切割的話最後的輸出不就要上萬個class? 11/13 20:35
bluecadence: 可以反問一下alan大 為何需要輸出上萬個class? 11/13 22:02
bluecadence: 如果你認為切割後比較有效率 那就切割吧。同樣的問題 11/13 22:04
bluecadence: 可以有很多種不同的解法。我只是告訴你固定五的字的 11/13 22:05
bluecadence: captcha,我可以不切割做辨識達到實戰 >99% 的正確率 11/13 22:06
bluecadence: 既然我不open source 你就當我唬爛嘴砲好了 :p 11/13 22:07
f496328mm: 比較想問,如果沒固定5個字的話,可以不切割嗎?因為台 11/13 23:25
f496328mm: 鐵驗證碼,4~6個字 11/13 23:25
f496328mm: 因為難一點的驗證碼,非常難切割,有些都黏在一起 11/13 23:26
bluecadence: 那就把模型建成輸出層輸出六個字,把空白用 * 或隨便 11/13 23:41
bluecadence: 一個特殊字元代表。 你得到的答案會像這樣 11/13 23:42
bluecadence: *4A*QC 12CEK 5*DQE4 少於六個字的空白輸出都會用* 11/13 23:43
bluecadence: 也就是把空白當成一個字元 也給他一個向量 11/13 23:44
bluecadence: 當然你回到網站輸入驗證碼的時候要把*去掉 11/13 23:46
bluecadence: 12CEKQ <- 剛剛少打一個字元 11/13 23:48
bluecadence: 只要你的訓練樣本夠 4~6 個字都有餵進去練就好 11/13 23:49
bluecadence: 不過你訓練樣本的標示可能會些困難 需要斟酌 11/13 23:52
bluecadence: 我沒有試過,或許標示直接給四個字,尾巴填兩格空白 11/13 23:56
bluecadence: 五個字+一個空白 這樣標 11/13 23:57
bluecadence: 訓練組這樣標示,答案就會像這樣 AXD2** 35CP* 11/13 23:59
bluecadence: 35CPR* (剛剛漏字) 11/14 00:00
bluecadence: 我是把標示都直接標在圖檔檔名,所以不能用 * 代表 11/14 00:01
bluecadence: 可以選擇用 - 或 _ 代表空白 11/14 00:02
bluecadence: 推文推的有點亂 忽略我第三行推文。總結就是用最大可 11/14 00:10
bluecadence: 能的碼數當作輸出層的輸出,訓練組標示 四個字的用 11/14 00:11
bluecadence: ABCD-- 五個字的 XQYZE- 六個字的 QWERTY 11/14 00:12
bluecadence: 你的字元集Aa..Zz 0..9 之外再加上一個空白字元"-" 11/14 01:00
alan23273850: 不切割的話一個class就對應到一個結果,000000~999 11/14 09:29
alan23273850: 999不就多到爆炸?我以為CNN只能用在分類問題 11/14 09:29
bluecadence: 我只能說你解captcha的模型有問題 隨你要怎麼做就怎 11/14 09:51
bluecadence: 麼做 建出的模型是要解決問題的 你想了一個解決不了 11/14 09:52
bluecadence: 問題的模型 我也管不著 11/14 09:52
bluecadence: 你可以繼續困在你解決不了問題的思維裡 請便 11/14 09:54
bluecadence: 你不會做不切割不代表別人不會做 這種辨識碼CNN出來 11/14 09:56
bluecadence: 之後基本上根本可以廢了 根本完全被破解了 11/14 09:57
bluecadence: 不然你以為為何google要重搞 reCAPTCHA? 11/14 10:02
bluecadence: 你已經落後三四年了 11/14 10:03
bluecadence: 一個class對應一個字元 你是有幾個字元阿? 11/14 10:10
bluecadence: 你的問題是你不會設計輸出層 就這樣而已 11/14 10:20
bluecadence: 要教NN舉一反三很難 教人也是 11/14 10:44
bluecadence: 網路上的例子都只開一條馬路 不能自己開六條馬路嗎? 11/14 10:49
bluecadence: "multiplexing" ... 11/14 10:50
alan23273850: 大大別這麼凶,我畢竟初學,好奇問個問題而已 11/14 14:20
aszx4510: alan大別灰心 我查到一個不用切字的做法 11/15 11:18
aszx4510: 我一開始也和你想的一樣,使用簡單的分類法,類別會很多 11/15 11:18
aszx4510: 但其實可以轉為multi-label的形式,詳細方法就看code吧 11/15 11:19
f496328mm: 這串討論蠻不錯的,講了很多重點,感謝上面的大大 11/15 13:36
kh555069: 雖然還是沒得到明確答案,不過樓歪得很好XD感謝大大們 11/16 08:54
kh555069: 的分享 11/16 08:54
liang1230: 笑死 某B不懂裝懂 把一堆cnn的缺點講成優點 你知道新 11/16 21:40
liang1230: 的架構capsule為何出來嗎 呵呵 11/16 21:40
Kazimir: 如果不切 輸出層我猜有兩種 一個是把label編碼以後回歸 11/19 02:00
Kazimir: 這樣子是6個輸出 或者是onehot 這樣是6*26*11(0-9 + *) 11/19 02:02
Kazimir: 切割也沒什麼錯 這樣的話一個nn就可以任意複用 11/19 02:03
Kazimir: 腦袋不清楚 6*37(a-z 0-9 *)才對 11/19 02:21
Kazimir: 當然我會傾向CNN-RNN這種架構 感覺比較有道理 11/19 02:23
aszx4510: 推樓上,理論上CNN-RNN是通解,但我好奇這種架構是不是 11/20 13:33
aszx4510: 需要更多training data呢XD 11/20 13:33
Kazimir: 如果直接一起訓練應該要吧? 11/24 21:45
f496328mm: 切割有缺點,切的不好會影響結果,error會累加上去 11/28 21:19

你可能也想看看

搜尋相關網站