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?
你先抓包看看图片的请求路径,然后用requests下载图片就行了
楼上的是一种方法, 用selenium + PhantomJS也可以
图片验证码 和 读取图片时的cokies是一体的
只要保证回答的验证码和cokies相一致就行。
最后我采用的是js方式