日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

网络投票轻松实现自动化 - 验证码识别的基本思路及方法

發布時間:2025/3/21 编程问答 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 网络投票轻松实现自动化 - 验证码识别的基本思路及方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

投票軟件比較有技術含量的部分就在驗證碼識別。為防止投票作弊,很多投票網站都會加隨機驗證碼,輸入驗證碼后才能投票。但是加了驗證碼是否就能萬無一失呢,也不盡然。雖然不是所有驗證碼都能識別(如QQ的變形漢字驗證碼是不太可能用軟件識別的,個人覺得),但還是有很多驗證碼可以用軟件來識別的。

下面以天涯博客里的評論驗證碼為例,說明驗證碼識別的基本思路和方法:

????????????????? (網頁截圖)

第一步、獲取驗證碼圖片
C#可以用HttpWebRequest類GET驗證碼的網址,得到返回的數據流,再將數據流值賦給Bitmap變量。在Winform里放一個PictureBox控件,將它的Image屬性指定為Bitmap變量,就可以顯示出驗證碼圖片了。
也可以使用Bitmap的Save方法將圖片保存成Bmp文件。
??? Stream resStream = response.GetResponseStream();//得到驗證碼數據流
??? Bitmap sourcebm = new Bitmap(resStream);//初始化Bitmap圖片在Photoshop中將驗證碼圖片放大1600%,如下:


第二步、將驗證碼圖片去色(將彩色轉換為灰度)
去色是為了進一步做成黑白雙色圖片。
??? Color c = sourcebm.GetPixel(x, y);
??? int luma = (int)(c.R * 0.3 + c.G * 0.59 + c.B * 0.11);//轉換灰度的算法
??? sourcebm.SetPixel(x, y, Color.FromArgb(luma, luma, luma));


第三步、去雜色,轉換為黑白圖片
從灰度圖片中可以看出,數字的顏色比較深,而雜色都是比較淺,所以可以設定一個臨界顏色值,顏色高于或等于這個值的設置為白色,低于這個值的設置為黑色。
??? Color c = sourcebm.GetPixel(x, y);
??? if (c.R >= critical_value)
??????? sourcebm.SetPixel(x, y, Color.FromArgb(255, 255, 255));
??? else
??????? sourcebm.SetPixel(x, y, Color.FromArgb(0, 0, 0));


第四步、動態得到每個數字的邊界


for (int x = 0; x < sourcebm.Width; x++)
{
??? myColumn = true;
??? for (int y = 0; y < sourcebm.Height; y++)
??? {
??????? Color c = sourcebm.GetPixel(x, y);
??????? if (c.R == 0 && charStart == false)//第一次出現黑點
??????? {
??????????? widthStartX[charNum] = x;
??????????? charStart = true;
??????????? break;
??????? }
??????? if (c.R == 0 && charStart == true)//后續出現黑點
??????? {
??????????? myColumn = false;
??????????? break;
??????? }
??? }
??? if (myColumn == true && charStart == true && widthStartX[charNum] < x)//如果當列沒有黑點并且前面出現過黑點還沒結束
??? {
??????? widthEndX[charNum] = x - 1;
??????? charStart = false;
??????? charNum++;
??? }
??? if (charStart == true && myColumn == false && x == (bmp.Width - 1))//如果開始出現黑點了,并且最后一列也有黑點
??? {
??????? widthEndX[charNum] = x;
??????? charStart = false;

??????? charNum++;
??? }
}

五、得到每個字符的特征碼
在每個字符的邊界內,檢測每個象素,如果象素為白色則為“0”,如果象素為黑色則為“1”,將“0”“1”連起來就是該數字或字符的特征碼。
??? Color c = sourcebm.GetPixel(x, y);
??? if (c.R == 0)
??????? str = str + "1";
??? else
??????? str = str + "0";

六、完成驗證碼圖片的識別
將獲取的特征碼和對應的數字或字符保存起來,下次再將新獲取的特征碼跟保存的特征碼對比,如果相同則提取對應的數字或字符,完成驗證碼的識別。

?

?

可為需要網絡投票的項目進行代為投票,也可為其制作定制的投票軟件。免費試投100票,滿意后再聯系QQ:2267367735

轉載于:https://www.cnblogs.com/hsxiaoma/archive/2011/12/08/2281053.html

總結

以上是生活随笔為你收集整理的网络投票轻松实现自动化 - 验证码识别的基本思路及方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。