[问题] 用 selenium 抢票

楼主: kh555069 (yuan)   2017-11-08 10:39:50
各位大神好
新手如我最近用selenium写了一个自动输入个人资料的小爬虫,只有验证码部分是手动输
入,输入完验证码之后就会自动跑完剩下的流程并完成订票,code部分只有.get , find_
element , send_key跟click
之前有听说,只要验证码是手动输入就没有违法问题,想确认这样是否真的没问题,感谢
各位
作者: wennie0433   2017-11-08 10:45:00
这事情我也干过XD 后来发现人多网站都会挂就懒得用了应该是没有违法 除非破解验证码
作者: neil987 (R5大小姐-EX人品崩坏)   2017-11-08 11:05:00
抢票 就是要做验证码识别 不过通常网站挂掉比较无解
作者: vi000246 (Vi)   2017-11-08 11:20:00
我之前有去pttlifelaw板问过了 你可以爬文看看
作者: f496328mm (为什么会流泪)   2017-11-08 12:29:00
验证码识别蛮简单的,我有做一个
楼主: kh555069 (yuan)   2017-11-08 13:15:00
之前有看过vi大的讨论串,那位回文的大大好像认定这样是违法
作者: uranusjr (←這人是超級笨蛋)   2017-11-08 16:41:00
抢票的 bottleneck 从来都不是输入资料的手速啊...
作者: HenryLiKing (HenryLiKing)   2017-11-08 16:58:00
楼上那句是什么意思呀我查翻译是 瓶颈 的意思耶(?)
作者: swallowcc (guest)   2017-11-08 19:56:00
意思就是问题一直都不是在输入资料的速度R
作者: vi000246 (Vi)   2017-11-08 20:22:00
但是开多线程可以赌赌看 一定比手动抢到的机会大
作者: fordpines (阿福)   2017-11-08 22:16:00
验证码识别是用pytesser做的? 有点兴趣
作者: Sunal (SSSSSSSSSSSSSSSSSSSSSSS)   2017-11-08 22:34:00
人家网站塞爆你输入多快也没用但是如果你用多开 这就有问题了
楼主: kh555069 (yuan)   2017-11-09 02:22:00
感谢各位大大的回复,我知道这种程度没办法抢演唱会等级的票。能帮家人抢到高铁票就够了,我只是想确认抢个2~3张会不会出事
作者: neil987 (R5大小姐-EX人品崩坏)   2017-11-09 06:54:00
高铁票需要抢吗QQ
楼主: kh555069 (yuan)   2017-11-09 08:58:00
要啊QQ 学生票星期六早上本来还有7折时段,现在几乎没了QQ。上礼拜买早鸟 一张打折票都抢不到
作者: f496328mm (为什么会流泪)   2017-11-09 10:04:00
验证码,自己做一个CNN就好了,麻烦的是,验证码是JS,直接抓会一直变,我是用selenium截图后,再去处理另外我是手动做train data,目前1万张
作者: goldflower (金色小黄花)   2017-11-09 12:16:00
这样标解答好累R
作者: f496328mm (为什么会流泪)   2017-11-09 13:39:00
很累啊,我也试过一大堆方法,都有现成套件,但都有些缺陷,结果都不好,demo时都很猛,实际上不见得好标解答,也可以写成程式,尽量提高速度啦,我一开始一天就可以1万张,5个验证码大约90%正确率,剩下就可以利用台铁验证码系统,帮我上label啦简单讲,对或错台铁会帮我判定,对的就存label,这样就变成自动上label啦,data会越来越多,有点类似reinforcement learning,当然这很像ddos攻击,是不太好啦
作者: alan23273850   2017-11-09 15:54:00
哇感谢f大开示!这种gen资料的方式太聪明了啦
作者: goldflower (金色小黄花)   2017-11-09 16:19:00
喔喔这蛮聪明的@@ 反正不用把正确率提到最高 自动化比较重要
作者: f496328mm (为什么会流泪)   2017-11-09 16:23:00
之后你data越多,基本上准确率越高
作者: goldflower (金色小黄花)   2017-11-09 18:52:00
不过data越多 如果错的testing没有标解答进去的话照理说之后看到一样的验证码还是会认错 因为还是没学所以应该还是要把错的验证码存下来手动输入几个
作者: f496328mm (为什么会流泪)   2017-11-09 19:32:00
还有一点是,在辨识之前,你的影像处理好不好,对之后的辨识,影响很大另外台铁算是最简单的验证码,有些连人都很难辨识
作者: bluecadence (Maxwell's demon)   2017-11-09 20:02:00
喂CNN影像基本上不必处理 顶多丢掉对辨识没帮助的彩色 转成灰阶。五个字整张图喂进去练,99%辨识率很容易。不要一直喂已经答对的图案,把辨识错误的图加进去训练很重要training set 3000 张基本上就可以 95% 了
作者: f496328mm (为什么会流泪)   2017-11-09 20:11:00
是一整张图辨识?我目前是切割,分开辨识
作者: bluecadence (Maxwell's demon)   2017-11-09 20:22:00
对不必切割 原图整张喂
作者: f496328mm (为什么会流泪)   2017-11-09 20:29:00
了解,因为切割也很麻烦,台铁还算可以切,其他的很复杂
作者: bluecadence (Maxwell's demon)   2017-11-09 20:59:00
用传统比对法 才有必要切割, 既然都用 cnn 了,就不必多此一举了 :p
作者: vi000246 (Vi)   2017-11-09 21:52:00
想问台铁黏在一起的字怎么切 想看看算法B大说不用切只要train 3000张 想问有范例吗我之前找到一篇文章 不用切的话要四万张才有9X%的成功率而且这验证码是自己产生自己训练的 跟抓别人的验证码手动标label的效率差很多
作者: neil987 (R5大小姐-EX人品崩坏)   2017-11-10 00:20:00
还是不太理解不切图的流程...求b大解释大概流程
作者: aszx4510 (wind)   2017-11-10 00:44:00
我猜是用image-to-text吧 先用CNN encoder 接着再使用RNN decoder 产生一串字串如果可以肯定验证码必定五个字 那用传统CNN分类就好了
作者: alan23273850   2017-11-10 01:06:00
献丑一下,我之前用前处理+数字切割,再每个数字丢进别人已经用tensorflow训练好的library去辨识,最后再合起来,辨识率只有1/8。因为前处理弄得不好,灰色的noise line其实跟数字很像,这学期正在学电脑视觉,希望能对前处理改良,应该会有帮助,不过我觉得还是不会比整张丢进 CNN 下去 train 还要好CNN 真的是一个大家都该会的东西呀......
作者: f496328mm (为什么会流泪)   2017-11-10 07:00:00
单纯用CNN做分类的话,5个数字,有10^5种组合耶,况且有时是4个数字,有时是6个,真的可以不切割?alan,我的数字影像处理,切割+旋转,之后再用CNN,1万张图,大约80~90%正确率其实验证码的影像处理,网络上一大堆人做过,可以去找找
作者: bluecadence (Maxwell's demon)   2017-11-10 08:48:00
如果会切图只辨识一个字母或数字,要训练 1~Nmax 字流程一模一样,重点是cnn几层,模型怎么建的。一般的网站都是固定字数,可以针对特定网站训练。我使用三层 conv layer 一层 fully connected 然后output layer 。 我针对两个网站都是五个字的图做解析,每天抓上千笔资料 真的正确率就是 > 99% 很少看见错误的。我也是写了这个tensorflow小程式 被 cnn的威力吓到 开始小玩tensorflow文字数字是非常有特征的物件 辨识真的不难阿...我不知道各位切图一个字后怎么做cnn,我的作法是把字母数字先向量化,整张图一维化,然后喂进 nn 这好像是蛮标准的程序(之一)阿而且如果需要穷尽所有样板可能性,才能让NN学会,你需要的是一个完整可以比对的数据库,不是NNNN的概念不就是要举一反N吗,而不是举N反N我的确相信 NN 在训练的过程中,把看过的东西都"记忆"下来了(在连结权重的网中),但你给他一张新的没看过的五字辨识图,它的确帮你判断出来了,这是除了记忆外,它也归类了辨识图中的一些文字数字特征,然后给出了正确答案。神经网络怎么学习的,最近读到一个 informationbottleneck 的说法,我觉得还蛮有趣的,可以 google关键字参考一下
作者: vi000246 (Vi)   2017-11-10 11:33:00
验证码有噪线、扭曲、不固定位置、颜色、相黏能直接喂资料的应该是比较简单的验证码吧?或是位置、扭曲都固定 但很难切割的验证码
作者: bluecadence (Maxwell's demon)   2017-11-10 11:35:00
http://bsr.twse.com.tw/bshtm/http://www.tpex.org.tw/web/stock/aftertrading/brokerBS.php我不知道这种算难还是不难?位置不固定会旋转我觉得更应该不切割直接喂这不就是cnn的优点强项吗?人脸辨识 不在照片固定位置 角度不同 扭曲 不是都能作到某种程度了吗?
作者: ron0803 (龙)   2017-11-10 12:14:00
B大是神,好强
作者: vi000246 (Vi)   2017-11-10 14:47:00
原来如此 谢谢B大说明
作者: f496328mm (为什么会流泪)   2017-11-11 09:03:00
感谢开示一维化,所以没有用到pooling?
作者: bluecadence (Maxwell's demon)   2017-11-11 10:27:00
推文打太快漏了字,一维化然后 reshape (所以还是二维阵列) 抱歉让您误会另外为什么我说用有平移旋转更应该用cnn 请google关键字 translation, rotation invariance + cnn
作者: f496328mm (为什么会流泪)   2017-11-11 11:23:00
blue大有github可以参考吗?感恩问一个问题,图片本来不是2维吗?为什么要先一维化,再变2维?改变整张图的大小吗?
作者: bluecadence (Maxwell's demon)   2017-11-11 16:44:00
只是配合tensorflow语法保持弹性可以动态指定批次图档数量。我短时间内并没有把程式码放在github开源的打算。
作者: f496328mm (为什么会流泪)   2017-11-11 18:36:00
ok,那我自己研究看看
作者: goldflower (金色小黄花)   2017-11-13 11:24:00
噪点那些问题在资料量够多下照理说会自然在训练的过程中被忽视 所以那些不用太在意不过有前处理做好可能收敛更快吧改变整张图的大小也行啊 这样你一个CNN 就能应用在多个网站上不过数字数量不固定的问题可能比较麻烦 但是如果training data有这个资讯 那就可以串两个nn 一个先做好meta learning就能再丢到对应的CNN model 了
作者: alan23273850   2017-11-13 20:33:00
顺便再推台大李弘毅老师的机器学习课程,专门给初学者听的,我这学期正在修,觉得获益良多,影片都在网络上,老师常用有趣的比喻说明,完全不会打瞌睡话说如果图不切割的话最后的输出不就要上万个class?
作者: bluecadence (Maxwell's demon)   2017-11-13 22:02:00
可以反问一下alan大 为何需要输出上万个class?如果你认为切割后比较有效率 那就切割吧。同样的问题可以有很多种不同的解法。我只是告诉你固定五的字的captcha,我可以不切割做辨识达到实战 >99% 的正确率既然我不open source 你就当我唬烂嘴砲好了 :p
作者: f496328mm (为什么会流泪)   2017-11-13 23:25:00
比较想问,如果没固定5个字的话,可以不切割吗?因为台铁验证码,4~6个字因为难一点的验证码,非常难切割,有些都黏在一起
作者: bluecadence (Maxwell's demon)   2017-11-13 23:41:00
那就把模型建成输出层输出六个字,把空白用 * 或随便一个特殊字符代表。 你得到的答案会像这样*4A*QC 12CEK 5*DQE4 少于六个字的空白输出都会用*也就是把空白当成一个字符 也给他一个向量当然你回到网站输入验证码的时候要把*去掉12CEKQ <- 刚刚少打一个字符只要你的训练样本够 4~6 个字都有喂进去练就好不过你训练样本的标示可能会些困难 需要斟酌我没有试过,或许标示直接给四个字,尾巴填两格空白五个字+一个空白 这样标训练组这样标示,答案就会像这样 AXD2** 35CP*35CPR* (刚刚漏字)我是把标示都直接标在图档档名,所以不能用 * 代表可以选择用 - 或 _ 代表空白推文推的有点乱 忽略我第三行推文。总结就是用最大可能的码数当作输出层的输出,训练组标示 四个字的用ABCD-- 五个字的 XQYZE- 六个字的 QWERTY你的字符集Aa..Zz 0..9 之外再加上一个空白字符"-"
作者: alan23273850   2017-11-14 09:29:00
不切割的话一个class就对应到一个结果,000000~999999不就多到爆炸?我以为CNN只能用在分类问题
作者: bluecadence (Maxwell's demon)   2017-11-14 09:51:00
我只能说你解captcha的模型有问题 随你要怎么做就怎么做 建出的模型是要解决问题的 你想了一个解决不了问题的模型 我也管不着你可以继续困在你解决不了问题的思维里 请便你不会做不切割不代表别人不会做 这种辨识码CNN出来之后基本上根本可以废了 根本完全被破解了不然你以为为何google要重搞 reCAPTCHA?你已经落后三四年了一个class对应一个字符 你是有几个字符阿?你的问题是你不会设计输出层 就这样而已要教NN举一反三很难 教人也是网络上的例子都只开一条马路 不能自己开六条马路吗?"multiplexing" ...
作者: alan23273850   2017-11-14 14:20:00
大大别这么凶,我毕竟初学,好奇问个问题而已
作者: aszx4510 (wind)   2017-11-15 11:18:00
alan大别灰心 我查到一个不用切字的做法https://github.com/CharlesLiuyx/verificationCode我一开始也和你想的一样,使用简单的分类法,类别会很多但其实可以转为multi-label的形式,详细方法就看code吧
作者: f496328mm (为什么会流泪)   2017-11-15 13:36:00
这串讨论蛮不错的,讲了很多重点,感谢上面的大大
楼主: kh555069 (yuan)   2017-11-16 08:54:00
虽然还是没得到明确答案,不过楼歪得很好XD感谢大大们的分享
作者: liang1230 (小良)   2017-11-16 21:40:00
笑死 某B不懂装懂 把一堆cnn的缺点讲成优点 你知道新的架构capsule为何出来吗 呵呵
作者: Kazimir (Kazimir)   2017-11-19 02:00:00
如果不切 输出层我猜有两种 一个是把label编码以后回归这样子是6个输出 或者是onehot 这样是6*26*11(0-9 + *)切割也没什么错 这样的话一个nn就可以任意复用脑袋不清楚 6*37(a-z 0-9 *)才对当然我会倾向CNN-RNN这种架构 感觉比较有道理
作者: aszx4510 (wind)   2017-11-20 13:33:00
推楼上,理论上CNN-RNN是通解,但我好奇这种架构是不是需要更多training data呢XD
作者: Kazimir (Kazimir)   2017-11-24 21:45:00
如果直接一起训练应该要吧?
作者: f496328mm (为什么会流泪)   2017-11-28 21:19:00
切割有缺点,切的不好会影响结果,error会累加上去

Links booklink

Contact Us: admin [ a t ] ucptt.com