Heim  >  Fragen und Antworten  >  Hauptteil

Python Selenium erhält Bildverifizierungscode

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中文网2685 Tage vor1563

Antworte allen(4)Ich werde antworten

  • 欧阳克

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

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

    Antwort
    0
  • 漂亮男人

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

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

    Antwort
    0
  • 过去多啦不再A梦

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

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

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

    Antwort
    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');

    Antwort
    0
  • StornierenAntwort