首頁  >  問答  >  主體

python selenium 取得圖片驗證碼

我想快取圖片驗證碼到本地,然後讓用戶透過web服務看到圖片手動打碼登入。
由於考慮到正式運行是無介面的,所以無法使用selenium的截圖。
除了selenium截圖和右鍵方式,還有沒有其他的辦法?

目前想到了用js將驗證碼重新請求到放入canvas中再toDataURL成png的base64碼輸出到Dom再用selenium取得。
下面的程式碼測試用的是行動商城的登入入口驗證碼。

$('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'));
};

如果請求驗證碼的url與登入的url不同網域的話就會錯誤跨域。
而且還需要測試這樣拿到的驗證碼圖片是否還存在當前會話有效期內。
請問上面的跨域問題該如何解決?

PHP中文网PHP中文网2685 天前1564

全部回覆(4)我來回復

  • 欧阳克

    欧阳克2017-06-12 09:23:28

    你先抓包看看圖片的請求路徑,然後用requests下載圖片就行了

    回覆
    0
  • 漂亮男人

    漂亮男人2017-06-12 09:23:28

    樓上的是一種方法, 用selenium + PhantomJS也可以

    回覆
    0
  • 过去多啦不再A梦

    过去多啦不再A梦2017-06-12 09:23:28

    圖片驗證碼 和 讀取圖片時的cokies是一體的

    只要保證回答的驗證碼和cokies一致就行。

    回覆
    0
  • 高洛峰

    高洛峰2017-06-12 09:23:28

    最後我採用的是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');

    回覆
    0
  • 取消回覆