精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

用 JS 實(shí)現(xiàn)了識(shí)別網(wǎng)頁(yè)驗(yàn)證碼的功能!

開(kāi)發(fā) 前端
當(dāng)時(shí)我寫(xiě)代碼的時(shí)候,沒(méi)有找到純 js 可以用的代碼和庫(kù),不能打包成 chrome 擴(kuò)展,用起來(lái)還是不太方便的。所以在驗(yàn)證了思路的可行性后,我就大致寫(xiě)下來(lái),給他人以方便吧。

 很高興大家喜歡!Github:leonof/imgRecJs[1],剛剛上傳,代碼還需要完善~因?yàn)橛胁簧偻瑢W(xué)表示訓(xùn)練和識(shí)別有疑問(wèn),我做了個(gè)小接口放在最后,可以方便大家先把流程走通。

后續(xù)會(huì)更新:將 js 代碼等打包成 chrome 擴(kuò)展程序,這樣就可以讓瀏覽器自動(dòng)識(shí)別,完全傻瓜式使用啦~!(更新啦:利用 chrome 擴(kuò)展,讓瀏覽器執(zhí)行我們的腳本[2])

其實(shí)整篇文章難度不高,網(wǎng)上也有很多 java、c 等的代碼。只是當(dāng)時(shí)我寫(xiě)代碼的時(shí)候,沒(méi)有找到純 js 可以用的代碼和庫(kù),不能打包成 chrome 擴(kuò)展,用起來(lái)還是不太方便的。所以在驗(yàn)證了思路的可行性后,我就大致寫(xiě)下來(lái),給他人以方便吧。

目前有多種驗(yàn)證碼識(shí)別思路,限于能力有限,我只好采用了最簡(jiǎn)單的機(jī)器學(xué)習(xí)。目標(biāo)驗(yàn)證碼也比較簡(jiǎn)單,如:

(含字母也一樣)

識(shí)別控制速度在 0.1 秒以內(nèi)的話,正確率在 99.99999%(因?yàn)橐恢笔亲R(shí)別正確哈哈哈)。

在動(dòng)手之前,先梳理一下大致思路,方便比較獨(dú)立的同學(xué)自己嘗試完成代碼:

1、先分析網(wǎng)頁(yè) DOM 結(jié)構(gòu),載入驗(yàn)證碼圖片。

2、將圖片畫(huà)到 canvas 上,拿到圖片的像素?cái)?shù)據(jù)。

3、先后對(duì)圖片進(jìn)行二值化、腐蝕膨脹、切割、旋轉(zhuǎn)、縮放處理。

4、記錄處理后的單個(gè)數(shù)字的二值化數(shù)據(jù),并人工錄入真實(shí)數(shù)字。

5、重復(fù)訓(xùn)練。

6、識(shí)別時(shí),用處理后的圖像與庫(kù)中數(shù)據(jù)對(duì)比,取得最相近的數(shù)據(jù),得到真實(shí)數(shù)字。

(以下優(yōu)化)

7、數(shù)據(jù)量大時(shí),可以取前幾個(gè)相似數(shù)據(jù),并按權(quán)重從中選出最可能的數(shù)字,以提高準(zhǔn)確度。

8、也可查找到相似度足夠高時(shí)停止搜索,取其作為最后識(shí)別結(jié)果,以提升效率。

大神們可以直接去寫(xiě)了,我這低級(jí)簡(jiǎn)單的代碼會(huì)遭你們嘲笑的。。。比較急于求成的同學(xué)也可以不用看了,回頭直接拿 demo 去修改吧!

好吧既然你看到這里了,我就盡量說(shuō)的清楚明白一點(diǎn)。

在動(dòng)手之前,我簡(jiǎn)單模擬一下需要輸入驗(yàn)證碼的網(wǎng)站,效果如下:

好吧,是真的簡(jiǎn)單…點(diǎn)擊圖片可以更換驗(yàn)證碼,輸入框用來(lái)輸入,按鈕模擬提交,如下:

我們就假裝他作為我們要自動(dòng)識(shí)別的目標(biāo)。

一、分析網(wǎng)頁(yè) DOM 結(jié)構(gòu),載入驗(yàn)證碼圖片。

我們可以看到,驗(yàn)證碼的 url 是:img/0.jpg。我這里的 url 會(huì)變化,是為了模擬更換驗(yàn)

  1. ctx1.drawImage(img,0,0,img.width,img.height); 

證碼的過(guò)程。但實(shí)際上,由于驗(yàn)證碼絕大多數(shù)為后臺(tái)生成的,所以地址是固定的。那么我們很容易就可以拿到圖片數(shù)據(jù):new 一個(gè) Image,賦值 url 即可(直接 get 到 img 元素也行)。參考代碼:

  1. var img = document.getElementById("img"); 

二、將圖片畫(huà)到 canvas 上,拿到圖片的像素?cái)?shù)據(jù)。

要將圖片畫(huà)到 canvas 上,首先要?jiǎng)?chuàng)建一個(gè) canvas 并初始化。參考代碼: 

  1. var canvas1 = document.createElement("canvas");  
  2. document.getElementsByTagName("body")[0].appendChild(canvas1);  
  3. canvas1.style.backgroundColor = "cornsilk"
  4.  var ctx1 = canvas1.getContext("2d"); 

隨后,將圖片繪制上去。參考代碼: 

  1. ctx1.drawImage(img,0,0,img.width,img.height); 

然后我們就可以利用 canvas,拿到圖片的像素?cái)?shù)據(jù)。參考代碼: 

  1. var imgData = ctx1.getImageData(0,0,WIDTH,HEIGHT); 

三、先后對(duì)圖片進(jìn)行二值化、腐蝕膨脹、切割、旋轉(zhuǎn)、縮放處理。

這部分是圖像識(shí)別的重點(diǎn),直接影響到識(shí)別準(zhǔn)確率和速度。復(fù)雜的驗(yàn)證碼還應(yīng)加上去躁等處理過(guò)程。比如可以檢測(cè)貫穿的橫線并消除,或者將顏色高度統(tǒng)一的背景去掉等等。我們的圖片幾乎沒(méi)有干擾,只有簡(jiǎn)單的旋轉(zhuǎn)和縮放,故直接進(jìn)行二值化操作(二值化也能去掉少量的干擾)。

1、二值化操作的思路是:計(jì)算圖片的平均灰度作為閾值,比閾值大的置為純黑,反之純白。參考代碼: 

  1. function toHex(fromImgData){//二值化圖像  
  2.     var fromPixelData = fromImgData.data;  
  3.     var greyAve = 0 
  4.     for(var j=0;j<WIDTH*HEIGHT;j++){  
  5.         var r = fromPixelData[4*j];  
  6.         var g = fromPixelData[4*j+1];  
  7.         var b = fromPixelData[4*j+2];  
  8.         greyAve += r*0.3 + g*0.59 + b*0.11;  
  9.     }  
  10.     greyAve /= WIDTH*HEIGHT;//計(jì)算平均灰度值。  
  11.     for(j=0;j<WIDTH*HEIGHT;j++){  
  12.         r = fromPixelData[4*j];  
  13.         g = fromPixelData[4*j+1];  
  14.         b = fromPixelData[4*j+2];  
  15.         var grey = r*0.333 + g*0.333 + b*0.333;//取平均值。  
  16.         greygrey = grey>greyAve?255:0;  
  17.         fromPixelData[4*j] = grey;  
  18.         fromPixelData[4*j+1] = grey;  
  19.         fromPixelData[4*j+2] = grey;  
  20.     }  
  21.     return fromImgData;  
  22. }//二值化圖像 

二值化后,效果如圖:

可以發(fā)現(xiàn),簡(jiǎn)單的背景色是可以去掉的。

二值化處理之后,就可以將圖片轉(zhuǎn)換成數(shù)組(存 0 或 1)來(lái)保存了。參考代碼如下: 

  1. function toXY(fromImgData){  
  2.     var result = new Array(HEIGHT);  
  3.     var fromPixelData = fromImgData.data;  
  4.     for(var j=0;j<HEIGHT;j++){  
  5.         result[j] = new Array(WIDTH);  
  6.         for(var k=0;k<WIDTH;k++){  
  7.             var r = fromPixelData[4*(j*WIDTH+k)];  
  8.             var g = fromPixelData[4*(j*WIDTH+k)+1];  
  9.             var b = fromPixelData[4*(j*WIDTH+k)+2];  
  10.             result[j][k] = (r+g+b)>500?0:1;//賦值0、1給內(nèi)部數(shù)組  
  11.         }  
  12.     }  
  13.     return result;  
  14. }//圖像轉(zhuǎn)數(shù)組 

2、接下來(lái)是腐蝕、膨脹。腐蝕的基本思路在于,將所有白色周?chē)南袼囟贾贸砂咨源藖?lái)消除游離的個(gè)別黑色像素點(diǎn)噪聲。膨脹正好相反,將黑色周?chē)贸珊谏龜?shù)字內(nèi)部的個(gè)別白色。同時(shí),腐蝕、膨脹的操作可以讓圖片更加平滑。參考代碼: 

  1. function corrode(fromArray){  
  2.     for(var j=1;j<fromArray.length-1;j++){  
  3.         for(var k=1;k<fromArray[j].length-1;k++){  
  4.             if(fromArray[j][k]==1&&fromArray[j-1][k]+fromArray[j+1][k]+fromArray[j][k-1]+fromArray[j][k+1]==0){  
  5.                 fromArray[j][k] = 0;  
  6.             }  
  7.         }  
  8.     }  
  9.     return fromArray;  
  10. }//腐蝕(簡(jiǎn)單)  
  11. function expand(fromArray){  
  12.     for(var j=1;j<fromArray.length-1;j++){  
  13.         for(var k=1;k<fromArray[j].length-1;k++){  
  14.             if(fromArray[j][k]==0&&fromArray[j-1][k]+fromArray[j+1][k]+fromArray[j][k-1]+fromArray[j][k+1]==4){  
  15.                 fromArray[j][k] = 1;  
  16.             }  
  17.         }  
  18.     }  
  19.     return fromArray;  
  20. }//膨脹(簡(jiǎn)單) 

由于我們的圖片背景干擾不是很強(qiáng)烈,所以基本看不出差別。不過(guò)對(duì)于計(jì)算機(jī)來(lái)說(shuō),還是有不同的喲~尤其是背景復(fù)雜的圖片,這一步很好用。

3、切割。

由于我們的圖片內(nèi)各數(shù)字沒(méi)有粘連,所以切割時(shí)只需要從上至下,從左至右掃描圖片,發(fā)現(xiàn)圖片某一豎行均為白色,就切一刀。有粘連的驗(yàn)證碼比較困難,暫時(shí)不討論了。參考代碼: 

  1. function split(fromArray,count){  
  2.     var numNow = 0 
  3.     var status = false 
  4.     var w = fromArray[0].length;  
  5.     for(var k=0;k<w;k++) {//遍歷圖像  
  6.         var sumUp = 0 
  7.         for (var j=0;j<fromArray.length;j++) //檢測(cè)整列是否有圖像  
  8.             sumUp += fromArray[j][k];  
  9.         if(sumUp == 0){//切割  
  10.             for (j=0;j<fromArray.length-1;j++)  
  11.                 fromArray[j].remove(k);  
  12.             w --;  
  13.             k --;  
  14.             status = false 
  15.             continue;  
  16.         }  
  17.         else{//切換狀態(tài)  
  18.             if(!status)  
  19.                 numNow ++;  
  20.             status = true 
  21.         }  
  22.         if(numNow!=count){//不是想要的數(shù)字  
  23.             for (j=0;j<fromArray.length-1;j++)  
  24.                 fromArray[j].remove(k);  
  25.             w --;  
  26.             k --;  
  27.         }  
  28.     }  
  29.     return fromArray;  
  30. }//切割,獲取特定數(shù)字 

切割后,左右的空白因?yàn)槎急磺辛耍蜎](méi)有了。但是上下仍然存在空白,所以進(jìn)行處理。這里比較簡(jiǎn)單,就不放代碼了,思路和切割類(lèi)似,但簡(jiǎn)單很多。

4、旋轉(zhuǎn)、縮放。

其實(shí)旋轉(zhuǎn)不是必要的。沒(méi)有旋轉(zhuǎn)的步驟,可以用更多的數(shù)據(jù)量訓(xùn)練來(lái)彌補(bǔ)。同理,縮放也不是必須的。先大致講一下思路:旋轉(zhuǎn)和縮放都再次利用了 canvas,將圖片畫(huà)上去之后,利用 canvas 的方法操作圖片旋轉(zhuǎn)或縮放,之后再把數(shù)據(jù)拿下來(lái),就像我們最開(kāi)始讀圖片時(shí)做的一樣。旋轉(zhuǎn)時(shí),取順時(shí)針逆時(shí)針各 90 度,取左右寬度最窄的角度,當(dāng)作數(shù)字站立的旋轉(zhuǎn)角度。縮放時(shí),直接按預(yù)設(shè)長(zhǎng)寬畫(huà)圖即可。這里我就只寫(xiě)了縮放。處理后再轉(zhuǎn)換回?cái)?shù)組形式。參考代碼: 

  1. function zoomToFit(fromArray){  
  2.     var imgD = fromXY(fromArray);  
  3.     var w = lastWidth 
  4.     var h = lastHeight 
  5.     var tempc1 = document.createElement("canvas");  
  6.     var tempc2 = document.createElement("canvas");  
  7.     tempc1.width = fromArray[0].length;  
  8.     tempc1.height = fromArray.length;  
  9.     tempc2.width = w;  
  10.     tempc2.height = h;  
  11.     var tempt1 = tempc1.getContext("2d");  
  12.     var tempt2 = tempc2.getContext("2d");  
  13.     tempt1.putImageData(imgD,0,0,0,0,tempc1.width,tempc1.height);  
  14.     tempt2.drawImage(tempc1,0,0,w,h);  
  15.     var returnImageD = tempt2.getImageData(0,0,WIDTH,HEIGHT);  
  16.     fromArray = toXY(returnImageD);  
  17.     fromArray.length = h;  
  18.     for(var i=0;i<h;i++)  
  19.         fromArray[i].length = w 
  20.     return fromArray;  
  21. }//尺寸歸一化 

處理后效果如圖:

四、記錄處理后的單個(gè)數(shù)字的二值化數(shù)據(jù),并人工錄入真實(shí)數(shù)字。

到這里,圖像處理就搞定了,后面的工作就比較簡(jiǎn)單了。我們把上一步得到的數(shù)組和真實(shí)的數(shù)字一起保存起來(lái)。這個(gè)過(guò)程可以有很多方法。我當(dāng)時(shí)采取了大家一起錄入的方式,所以搭建了 PHP+MySQL 的服務(wù)器,用數(shù)據(jù)庫(kù)存儲(chǔ)。這塊就不詳述了,大家各顯神威。

五、重復(fù)訓(xùn)練

為了方便訓(xùn)練,我直接在頁(yè)面里增加了手動(dòng)輸入的地方,提交后刷新驗(yàn)證碼,繼續(xù)提交。提交 20 個(gè)驗(yàn)證碼(20*4=80 個(gè)數(shù)字)后,便經(jīng)常可以正確識(shí)別出 4 位驗(yàn)證碼,在單個(gè)數(shù)字的數(shù)據(jù)量在 300 左右時(shí)(大約需要 300/4=75 個(gè)驗(yàn)證碼),識(shí)別效率已經(jīng)在 95%以上。在 500 左右時(shí)已經(jīng)基本見(jiàn)不到錯(cuò)誤識(shí)別的情況了,這時(shí)候已經(jīng)可以寫(xiě)代碼實(shí)現(xiàn)自我訓(xùn)練了。此時(shí)識(shí)別一次大約需要 0.06 秒。

六、識(shí)別時(shí),用處理后的圖像與庫(kù)中數(shù)據(jù)對(duì)比,取得最相近的數(shù)據(jù),得到真實(shí)數(shù)字。

這塊也比較簡(jiǎn)單。訓(xùn)練完成后,我將數(shù)據(jù)庫(kù)數(shù)據(jù)導(dǎo)出,保存成了一個(gè)大的數(shù)組,直接用 js 就可以讀了。識(shí)別時(shí)遍歷所有的數(shù)據(jù),按像素點(diǎn)逐一比較。由于尺寸做了歸一化,所以直接數(shù)有多少像素匹配即可。匹配數(shù)量最多的即為識(shí)別出的結(jié)果。我只找到了最開(kāi)始寫(xiě)的 PHP 代碼,先放一下吧,有點(diǎn)懶得再寫(xiě) js 了…: 

  1. function check($str)  
  2.  
  3.     $str = str_split($str,1);  
  4.     $length = count($str);  
  5.     $tempNum = 0 
  6.     $tempSimmiar = 0 
  7.     $query = "SELECT * FROM numkeys" 
  8.     $sth = execSql($query);  
  9.     while ($RES = $sth->fetch()) {  
  10.         $thisSimmiar = 0 
  11.         $thisFeature = str_split($RES["feature"],1);  
  12.         $thisNum = $RES["resultnum"];  
  13.         for($i=0;$i<$length;$i++){  
  14.             if($thisFeature[$i]==$str[$i]){  
  15.                 $thisSimmiar ++;  
  16.             }  
  17.         }  
  18.         if($thisSimmiar>$tempSimmiar){  
  19.             $tempSimmiar = $thisSimmiar;  
  20.             $tempNum = $thisNum;  
  21.         }  
  22.     }  
  23.     return $tempNum;  

七、優(yōu)化部分

這塊就大家自己看著來(lái)吧,因?yàn)槲业膱D片不是很復(fù)雜,數(shù)據(jù)量也不是很大(千條級(jí)別),所以也沒(méi)啥優(yōu)化的必要,每次識(shí)別大約 0.1 秒吧。所以我只是沒(méi)事干,做了之前大綱里寫(xiě)了那兩個(gè)優(yōu)化。其實(shí)我感覺(jué)主要的優(yōu)化方向還是圖像處理那塊,盡量減少干擾,才能提高效率,也能檢測(cè)更復(fù)雜的驗(yàn)證碼。

PS:訓(xùn)練和識(shí)別的接口:

訓(xùn)練:POST 發(fā)送 username(用戶名)、password(密碼)、n1(第一個(gè)數(shù)組)、n2、n3

、n4、num(真實(shí)四位字符)至 http://www.leonszone.cn/test/yanzhengma/train.php[3]。參考代碼: 

  1. function sendData() {  
  2.     var str = prompt("請(qǐng)輸入驗(yàn)證碼:", "");  
  3.     if(!str)  
  4.         return false;  
  5.     postData = {//整合數(shù)據(jù)包  
  6.         username: 'pdgzfx',  
  7.         password: 'pdgzfx',  
  8.         nums: str,  
  9.         n1: numsArray[0],  
  10.         n2: numsArray[1],  
  11.         n3: numsArray[2],  
  12.         n4: numsArray[3]  
  13.     };  
  14.     $.ajax({ 
  15.          url: 'http://www.leonszone.cn/test/yanzhengma/train.php',  
  16.         type: 'POST',  
  17.         data: postData,  
  18.         success: function (data) {  
  19.             console.log(data);  
  20.             setTimeout(function () {  
  21.                 location.reload();  
  22.             },1000);  
  23.         }  
  24.     });  

識(shí)別:POST 發(fā)送 username(用戶名)、password(密碼)、n1(第一個(gè)數(shù)組)、n2、n3、n4 至 http://www.leonszone.cn/test/yanzhengma/check.php[4]。參考代碼: 

  1. function getData() {  
  2.     postData = {//整合數(shù)據(jù)包  
  3.         username: 'pdgzfx',  
  4.         password: 'pdgzfx',  
  5.         nums: 'help!!!',  
  6.         n1: numsArray[0],  
  7.         n2: numsArray[1],  
  8.         n3: numsArray[2],  
  9.         n4: numsArray[3]  
  10.     };  
  11.     $.ajax({  
  12.         url: 'http://www.leonszone.cn/test/yanzhengma/check.php',  
  13.         type: 'POST', 
  14.         data: postData,  
  15.         success: function (data) {  
  16.             $("#Vercode").val(data);  
  17.             console.log(data);  
  18.         }  
  19.     });  

注冊(cè)用戶名密碼(防止大家的庫(kù)混淆):POST 或 GET 發(fā)送 username(用戶名)、password(密碼)至 http://www.leonszone.cn/test/yanzhengma/regist.php[5]。參考代碼: 

  1. function getData() {  
  2.     postData = {//整合數(shù)據(jù)包  
  3.         username: 'pdgzfx',  
  4.         password: 'pdgzfx',  
  5.         };  
  6.     $.ajax({  
  7.         url: 'http://www.leonszone.cn/test/yanzhengma/regist.php',  
  8.         type: 'POST',  
  9.         data: postData,  
  10.         success: function (data) {  
  11.             console.log(data); } }); } 

或直接瀏覽器訪問(wèn):http://www.leonszone.cn/test/yanzhengma/regist.php\?username= 你的用戶名 \&amp;amp;password=[6]你的密碼

好累,先休息下,看看有沒(méi)有人看吧…(我感覺(jué)應(yīng)該沒(méi)多少人= = 還真的有人!!!) 

 

責(zé)任編輯:龐桂玉 來(lái)源: Web開(kāi)發(fā)
相關(guān)推薦

2013-06-19 10:19:59

2022-05-11 07:41:31

Python驗(yàn)證碼

2024-01-29 08:32:10

Python驗(yàn)證碼識(shí)別

2009-06-26 15:17:27

jQuery

2022-02-02 20:21:24

短信驗(yàn)證碼登錄

2015-09-21 15:31:05

php實(shí)現(xiàn)驗(yàn)證碼

2014-04-24 10:09:05

驗(yàn)證碼C#

2020-12-29 05:33:03

Serverless驗(yàn)證碼架構(gòu)

2023-10-27 08:53:13

Python驗(yàn)證碼圖片識(shí)別

2022-09-21 08:40:04

OCR技術(shù)驗(yàn)證碼

2024-05-10 08:38:16

2009-11-23 16:59:23

PHP圖形驗(yàn)證碼

2022-02-11 07:10:15

驗(yàn)證碼

2021-01-19 10:29:34

短信驗(yàn)證碼密碼

2009-12-16 15:46:41

Ruby on rai

2021-06-16 06:58:09

TensorFlow識(shí)別驗(yàn)證碼

2020-11-16 07:28:53

驗(yàn)證碼

2024-04-08 14:10:06

2011-11-02 12:43:33

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

牛夜精品久久久久久久| 久久五月天婷婷| 免费在线看黄网址| 国产欧美三级电影| 欧美色电影在线| avav在线播放| 免费理论片在线观看播放老| 日韩有码一区二区三区| 久久99精品久久久久久琪琪| 国精产品一区一区三区免费视频| 亚洲a成人v| 欧美日韩精品在线观看| 一本久道久久综合| 婷婷五月综合久久中文字幕| 麻豆国产欧美一区二区三区| 97人人爽人人喊人人模波多| 成年人网站在线观看视频| 香蕉久久精品| 欧美大片免费久久精品三p| 欧美在线观看成人| 在线观看男女av免费网址| 久久久久久久免费视频了| 91在线视频免费| 亚洲黄网在线观看| 尹人成人综合网| 精品国内亚洲在观看18黄 | 亚洲午夜精品久久久中文影院av| 亚洲国产av一区二区| 青青草视频一区| 日本国产一区二区三区| 91精品国产高潮对白| 久久一级电影| 夜夜嗨av一区二区三区免费区| 成人在线视频免费播放| 久久久久久亚洲精品美女| 欧美性videosxxxxx| 69堂免费视频| 高清在线视频不卡| 亚洲综合丝袜美腿| 国产高清免费在线| 日本在线免费| 国产精品麻豆久久久| 欧美亚洲丝袜| 欧美日韩在线中文字幕| 99视频精品在线| 国产在线播放一区二区| 亚洲精品一区二区三区不卡| 国产精品一二三四区| 亚洲自拍偷拍一区| www.蜜臀av.com| 高清国产一区二区| 成人动漫在线视频| 国产区精品在线| 国产毛片精品国产一区二区三区| 91精品视频在线| 国产精品九九九九| 国产伦精品一区二区三区免费迷 | 中文字幕乱码视频| 青青草91视频| 国产色综合天天综合网| 97久久人国产精品婷婷| 国产毛片精品国产一区二区三区| 91国产在线播放| 亚洲乱熟女一区二区| av电影天堂一区二区在线观看| 国产亚洲福利社区| 欧洲毛片在线| 国产精品你懂的| 熟女熟妇伦久久影院毛片一区二区| 激情成人四房播| 亚洲精品免费在线播放| 91成人综合网| 一根才成人网| 欧美日韩一区在线| 国内av免费观看| 亚洲综合影院| 亚洲精品中文字幕女同| 日韩av片在线| 午夜精品视频| 91精品国产自产91精品| 国产第一页在线观看| 精品伊人久久久久7777人| 丁香婷婷久久久综合精品国产 | 欧美国产中文高清| 亚洲国产成人精品电影| 日本xxxxxxxxx18| 亚洲国产一区二区三区在线播放| 久久久久久免费精品| 精人妻无码一区二区三区| 国内成人自拍视频| 久久久久久精| 麻豆av免费在线观看| 亚洲mv在线观看| 国产又猛又黄的视频| jizz18欧美18| 中文字幕日韩电影| 国产精品19乱码一区二区三区| 日韩主播视频在线| 99久久无色码| a黄色在线观看| 亚洲午夜精品一区二区三区他趣| 爆乳熟妇一区二区三区霸乳| 麻豆精品国产| 一区二区欧美亚洲| 国产乡下妇女做爰| 国产一区高清在线| 欧美视频小说| 国产丝袜精品丝袜| 欧美日韩一区二区三区在线| 久久人人爽人人人人片| 婷婷亚洲图片| 国产精品福利在线观看网址| 日本精品一区二区在线观看| 中文字幕一区二区视频| 成人免费观看毛片| 91亚洲无吗| 久久亚洲精品网站| 国产主播第一页| 99re成人在线| 91免费黄视频| 欧美日韩国产一区二区在线观看| 国产亚洲a∨片在线观看| 精品久久免费视频| 国产盗摄视频一区二区三区| 伊甸园精品99久久久久久| 东京一区二区| 亚洲欧美中文字幕| 日韩精品一区二区三区国语自制| 国产乱码精品1区2区3区| 亚洲一一在线| 成人国产一区二区三区精品麻豆| 亚洲精品综合久久中文字幕| 日韩精品――中文字幕| 国产不卡在线视频| 国产911在线观看| 精品国产一区二区三区性色av| 最近2019年中文视频免费在线观看| 亚洲成人第一网站| 久久尤物电影视频在线观看| 免费毛片小视频| 日韩高清一级| 日本免费一区二区三区视频观看| 亚洲av电影一区| 欧美午夜精品久久久久久人妖 | 欧美人妖在线观看| 午夜精品美女自拍福到在线| 好吊视频一区二区三区| 亚洲一区av在线| 亚洲一区二区三区四区av| 国色天香一区二区| 国产高清在线精品一区二区三区| 欧美四级在线| 亚洲成人激情在线| 黄色激情视频在线观看| 99精品视频一区| 国产一区二区在线视频播放| 亚洲人和日本人hd| 国产精品福利网站| 九色porny丨首页在线| 91精品久久久久久久91蜜桃| 久草福利资源在线观看| a在线播放不卡| 茄子视频成人免费观看| 日韩大片在线| 亚洲aⅴ日韩av电影在线观看 | 理论在线观看| 欧美色倩网站大全免费| 中文字幕第69页| 国产麻豆欧美日韩一区| 婷婷五月综合缴情在线视频| 欧美天堂影院| 国产精品视频精品| 亚洲第一图区| 亚洲区免费影片| 国产美女裸体无遮挡免费视频| 亚洲精品大片www| 欧美性xxxx图片| 麻豆成人久久精品二区三区红| 亚洲小视频在线播放| 韩国精品福利一区二区三区| 国产成人精品亚洲精品| 精品麻豆一区二区三区| 亚洲精品一区二区三区香蕉| 91午夜精品亚洲一区二区三区| 国产精品久久久久久久久免费桃花| 亚洲欧美激情一区二区三区| 久久久精品性| 一级黄色免费在线观看| 女仆av观看一区| 成人黄色免费在线观看| 51精品在线| 色妞在线综合亚洲欧美| 日本人妻丰满熟妇久久久久久| 欧洲视频一区二区| 久久免费在线观看视频| 中文字幕不卡在线观看| 中文字幕在线视频播放| 另类成人小视频在线| 一二三四视频社区在线| 99精品视频在线| 蜜桃传媒视频麻豆第一区免费观看 | 久久九九精品| 水蜜桃在线免费观看| 国产精品免费大片| 国产日韩精品一区观看| 国产高清视频一区二区| 国产极品精品在线观看| 国产精品蜜芽在线观看| 久久婷婷国产麻豆91天堂| 免费人成在线观看网站| 精品欧美乱码久久久久久1区2区| 中文天堂在线资源| 亚洲成人高清在线| 翔田千里88av中文字幕| 中文字幕乱码亚洲精品一区| 久久一区二区电影| 国产精品亚洲视频| 亚洲激情在线看| 日韩电影在线免费| 99精品人妻少妇一区二区 | 国产精品午夜在线观看| 国产网站无遮挡| 国产98色在线|日韩| 一级淫片在线观看| 美女视频黄a大片欧美| 日韩欧美xxxx| 天堂在线亚洲视频| 国产一区二区三区精彩视频 | 人妻91麻豆一区二区三区| 91精品国产色综合久久不卡电影| 中文字幕777| 色国产综合视频| 色屁屁影院www国产高清麻豆| 亚洲高清久久久| 久久精品www人人爽人人| 亚洲免费观看高清| 精品国产精品国产精品| 国产精品久久久一本精品| 娇妻被老王脔到高潮失禁视频| 久久免费的精品国产v∧| 亚洲天堂视频一区| 久久丝袜美腿综合| av小说在线观看| 国产肉丝袜一区二区| 久久久久久久毛片| 国产日产欧美一区二区三区| 欧美 日韩 国产 成人 在线观看| 久久嫩草精品久久久精品一| 性猛交ⅹxxx富婆video| 国产欧美日韩亚州综合| 日本伦理一区二区三区| 国产精品久久久久久亚洲毛片| 99自拍偷拍视频| 亚洲欧美自拍偷拍色图| 精品97人妻无码中文永久在线| 亚洲黄色免费网站| 中文在线观看免费网站| 欧美日韩在线第一页| 不卡av电影在线| 欧美日韩欧美一区二区| 国产精品嫩草影院桃色| 日韩欧美一级二级三级久久久| 亚洲第一天堂在线观看| 日韩成人在线播放| 精品三级久久久久久久电影聊斋| 一本色道久久88综合日韩精品| 日韩在线观看www| 另类专区欧美制服同性| 暧暧视频在线免费观看| 日本精品久久久久影院| 九九久久国产| av免费观看久久| 中文字幕中文字幕精品| 亚洲欧洲日韩精品| 欧美日韩一卡| 蜜臀av午夜一区二区三区| 精品在线一区二区三区| 西西大胆午夜视频| 国产精品乱人伦| 久久9999久久免费精品国产| 91福利在线导航| av手机免费看| 亚洲性线免费观看视频成熟| av文字幕在线观看| 日本久久久久久久久久久| 欧美黄页免费| 久久久久综合一区二区三区| 久久久影院免费| 免费在线观看亚洲视频| 美女久久久精品| 喷水视频在线观看| 亚洲国产成人在线| 国产无遮挡裸体免费视频| 91国在线观看| 免费观看黄一级视频| 伊人亚洲福利一区二区三区| 久久香蕉av| 国产一区视频在线| 婷婷综合一区| 久久福利一区二区| 麻豆成人在线| 深田咏美中文字幕| 亚洲免费观看在线观看| 久久精品视频2| 亚洲国产精品高清久久久| 免费看美女视频在线网站| 欧美综合国产精品久久丁香| 日韩三级不卡| 亚洲精品在线免费看| 99精品欧美| 中文字幕99页| 亚洲狼人国产精品| 又色又爽又黄无遮挡的免费视频| 亚洲国产天堂久久国产91| 伊人电影在线观看| 国产美女久久精品| 欧美猛男做受videos| 国产成a人亚洲精v品在线观看| 老色鬼精品视频在线观看播放| 亚洲午夜久久久久久久久红桃| 亚洲国产精品天堂| 北条麻妃一二三区| 久久激情五月丁香伊人| 香蕉成人影院| 免费成人看片网址| 日韩网站在线| 无码国产69精品久久久久网站| 亚洲精品一二三区| 一级成人免费视频| 在线观看日韩欧美| 免费电影日韩网站| 久久伊人资源站| 夜夜嗨av一区二区三区网站四季av| 亚洲911精品成人18网站| 亚洲素人一区二区| 国产黄色片免费| 插插插亚洲综合网| 日韩中文字幕无砖| 欧美一级中文字幕| 国产91在线看| 午夜精品三级久久久有码| 亚洲成人网在线| 精品丝袜在线| 麻豆成人小视频| 久久久久久一区二区| 日本少妇高潮喷水xxxxxxx| 91黄色免费网站| 91在线观看| 91日本在线视频| 欧美久色视频| 久久性爱视频网站| 午夜不卡av在线| 色av男人的天堂免费在线| 日本一区二区不卡| 日韩欧美国产精品综合嫩v| 亚洲天堂2018av| 亚洲视频1区2区| 亚洲奶汁xxxx哺乳期| 欧美中文字幕在线播放| 国产成人久久| 亚洲免费av一区| 亚洲激情欧美激情| 亚洲av片在线观看| 国产精品色视频| 国产精品地址| 波多野结衣福利| 欧美丝袜丝nylons| 成年人网站在线| 精品国产乱码久久久久久丨区2区| 性欧美长视频| 色偷偷男人天堂| 欧美大片在线观看| 小黄鸭精品aⅴ导航网站入口| 亚洲砖区区免费| 丰满白嫩尤物一区二区| 成人公开免费视频| 日韩一区视频在线| 国产精品视屏| 中文字幕在线综合| 亚洲国产一区二区在线播放| 精品av中文字幕在线毛片| 91视频国产一区| 国产模特精品视频久久久久| 国产精品一区二区亚洲| 亚洲国产中文字幕在线观看| 国产福利亚洲| 青青草视频在线免费播放| 中文字幕av一区二区三区高| 亚洲黄色一级大片| 国产剧情日韩欧美| 在线电影一区| 欧美性生交大片| 亚洲女人天堂视频| 精品国产亚洲一区二区三区在线 | 黄色www网站| 成人免费在线观看入口| 同心难改在线观看| 91精品婷婷国产综合久久蝌蚪| 视频一区二区不卡| 日本特黄特色aaa大片免费|