Python Selenium erhält Bildverifizierungscode
PHP中文网
PHP中文网 2017-06-12 09:21:28
0
4
1589

Ich möchte den Bildbestätigungscode lokal zwischenspeichern und dann dem Benutzer das Bild über den Webdienst anzeigen lassen und den Code manuell eingeben, um sich anzumelden.
Da der offizielle Betrieb schnittstellenlos ist, können Selenium-Screenshots nicht verwendet werden.
Gibt es neben dem Selenium-Screenshot und der Rechtsklick-Methode noch eine andere Möglichkeit?

Derzeit denke ich darüber nach, js zu verwenden, um den Bestätigungscode erneut in Canvas anzufordern und dann toDataURL in PNG-Base64-Code umzuwandeln und ihn an Dom auszugeben und ihn dann mit Selenium abzurufen.
Der folgende Codetest verwendet den Login-Zugangsbestätigungscode des mobilen Einkaufszentrums.

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

Wenn die URL, die den Bestätigungscode anfordert, von einer anderen Domäne als die Anmelde-URL stammt, wird ein domänenübergreifender Fehler gemeldet.
Sie müssen außerdem testen, ob das auf diese Weise erhaltene Verifizierungscode-Bild noch innerhalb des Gültigkeitszeitraums der aktuellen Sitzung vorhanden ist.
Wie kann das oben genannte domänenübergreifende Problem gelöst werden?

PHP中文网
PHP中文网

认证0级讲师

Antworte allen(4)
学霸

你先抓包看看图片的请求路径,然后用requests下载图片就行了

漂亮男人

楼上的是一种方法, 用selenium + PhantomJS也可以

过去多啦不再A梦

图片验证码 和 读取图片时的cokies是一体的

只要保证回答的验证码和cokies相一致就行。

小葫芦

最后我采用的是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');
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage