python selenium 獲取圖片驗(yàn)證碼
問(wèn)題描述
我想緩存圖片驗(yàn)證碼到本地,然后讓用戶(hù)通過(guò)web服務(wù)看到圖片手動(dòng)打碼登錄。由于考慮到正式運(yùn)行是無(wú)界面的,所以無(wú)法使用selenium的截屏。除了selenium截屏和右鍵方式,還有沒(méi)有其他的辦法?
目前想到了用js將驗(yàn)證碼重新請(qǐng)求到放入canvas中再toDataURL成png的base64碼輸出到Dom再用selenium獲取。下面的代碼測(cè)試用的是移動(dòng)商城的登錄入口驗(yàn)證碼。
$(’body’).append(’<canvas id='CAVASIMG'></canvas>’);var img=new Image();img.src='http://shop.10086.cn/i/authImg';var d=document.getElementById('CAVASIMG');var cxt=d.getContext('2d');img.onload = function(){ d.width = img.width;d.height = img.height; cxt.drawImage(img,0,0); console.log(d.toDataURL(’png’));};
如果請(qǐng)求驗(yàn)證碼的url與登錄的url不同域的話就會(huì)報(bào)錯(cuò)跨域。而且還需要測(cè)試這樣拿到的驗(yàn)證碼圖片是否還存在當(dāng)前會(huì)話有效期內(nèi)。請(qǐng)問(wèn)上面的跨域問(wèn)題該如何解決?
問(wèn)題解答
回答1:你先抓包看看圖片的請(qǐng)求路徑,然后用requests下載圖片就行了
回答2:樓上的是一種方法, 用selenium + PhantomJS也可以
回答3:圖片驗(yàn)證碼 和 讀取圖片時(shí)的cokies是一體的
只要保證回答的驗(yàn)證碼和cokies相一致就行。
回答4:最后我采用的是js方式
var img=document.getElementById(’IMGCODEID’);var d=document.createElement(’CANVAS’);var cxt=d.getContext(’2d’);d.width=img.width;d.height=img.height;cxt.drawImage(img,0,0);img.src=d.toDataURL(’png’);
相關(guān)文章:
1. boot2docker無(wú)法啟動(dòng)2. docker-compose中volumes的問(wèn)題3. 關(guān)docker hub上有些鏡像的tag被標(biāo)記““This image has vulnerabilities””4. java - SSH框架中寫(xiě)分頁(yè)時(shí)service層中不能注入分頁(yè)類(lèi)5. nignx - docker內(nèi)nginx 80端口被占用6. docker安裝后出現(xiàn)Cannot connect to the Docker daemon.7. javascript - mock.js可以存儲(chǔ)數(shù)據(jù)嗎8. docker api 開(kāi)發(fā)的端口怎么獲取?9. docker images顯示的鏡像過(guò)多,狗眼被亮瞎了,怎么辦?10. golang - 用IDE看docker源碼時(shí)的小問(wèn)題

網(wǎng)公網(wǎng)安備