[PYTHON] Täglich automatisch die reCAPTCHA-Site abkratzen (5/7: 2captcha)

  1. Anforderungsdefinition ~ Aufbau der Python-Umgebung
  2. Erstellen eines Site-Scraping-Mechanismus
  3. Verarbeiten Sie die heruntergeladene Datei (xls), um das Endprodukt (csv) zu erstellen
  4. Datei von S3 herunterladen / Datei in S3 hochladen
  5. ** 2 Captcha implementiert **
  6. Lassen Sie es in einem Docker-Container starten
  7. Registrieren Sie sich für den AWS-Stapel

Auf dem Weg zur automatischen Ausführung

Bis zum letzten Mal ist es ein Programm geworden, das den Zweck erreichen kann. Aber ... diese Anforderung erfordert, dass dies jeden Tag regelmäßig durchgeführt wird.

Normalerweise können Sie das Batch-System regelmäßig mit Cron usw. betreiben, aber diesmal ist es nicht so einfach.

  1. ReCAPTCHA muss freigegeben werden (Bildschirm erforderlich, manuelle Arbeit erforderlich)
  2. Selen funktioniert auch nicht im Headless-Modus (kein Bildschirm) (da ein Klick-Download erforderlich war)

Erstens reCAPTHCA Maßnahmen. Als ich es nachschlug, stellte ich fest, dass es einen russischen Dienst namens "2CAPTCHA" gab.

image.png

Es ist ein Dienst, der reCAPTCHA remote freigibt. Es ist außergewöhnlich billig, mit einem Durchbruch von 1000 Mal und mehreren hundert Yen. Ich fand es etwas verdächtig, entschied mich aber dafür.

Registrierung bei 2captcha ~ Billing

Registrieren Sie ein Konto bei 2captcha und setzen Sie Geld in Balance. Sie werden nicht nur für die Registrierung und Verwendung Ihrer Kreditkarte belastet, sondern können den Service auch für den eingezahlten Geldbetrag nutzen.

image.png

Ich werde weglassen, wie man es benutzt, weil es andere Leute gibt, die es eingeführt haben.

https://tanuhack.com/pr-2captcha/

Da ich "PayU" jedoch nicht verwenden konnte, habe ich Paypal über "PayPro Global" verwendet und zuerst 300 Yen berechnet. Bei der gegenwärtigen Rate scheint dies ungefähr 3000 Mal zu gehen.

Installation von 2captcha

Vorbereitungen

Als allererstes

--2 Abrufen des API-Schlüssels von Captcha

Sie müssen drei Dinge tun.

google_site_key soll ein Schuss sein, wenn Sie mit `data-sitekey auf der obigen Site suchen, aber in meinem Fall war es in Javascript auf der Quelle. Es fühlt sich an, als hätte ich es gefunden, indem ich nach "recaptcha" gesucht habe. (Im Gegenteil, um Durchbrüche bei der Nutzung dieses Dienstes zu verhindern, kann es hilfreich sein, es schwierig zu machen, hier zu finden ...)

Der Textbereich fand sofort eine # g-recaptcha-Antwort. Aufgrund des Mechanismus kann dies nicht geändert werden ...

Textbereich sichtbar machen

Wie Sie auf der Einführungsseite oben sehen können, können Sie den Textbereich nicht eingeben, wenn er unsichtbar ist. Verwenden Sie daher Javascript, um ihn zu visualisieren.

Außerdem wurde auf meiner Zielwebsite das Kontrollkästchen reCAPTCHA selbst ausgeblendet. Das Verhalten war "Drücken Sie die Anmeldetaste, um reCAPTCHA zu erhalten (drücken Sie nach dem Abbrechen erneut die Anmeldetaste, um sich anzumelden)".

driver.execute_script('document.querySelector(hoge).style.height = "auto";')
driver.execute_script('document.querySelector(hoge).style.position = "inherit";')
driver.execute_script('document.getElementById("g-recaptcha-response").style.display="";')

Bitten Sie 2captcha, es freizugeben

Holen Sie sich zuerst die captcha_id wie folgt. Ich hatte noch nie einen FEHLER damit, aber es wird passieren, wenn es um Service-Wartung geht.

#Überprüfen Sie, ob 2captcha bereit ist
url = "http://2captcha.com/in.php?key=" + config.service_key + "&method=userrecaptcha&googlekey=" + config.google_site_key + "&pageurl=" + LOGIN_URL 
resp = requests.get(url) 
if resp.text[0:2] != 'OK': 
    exit('2captcha Service error. Error code:' + resp.text) 
captcha_id = resp.text[3:]

Verwenden Sie dann diese captcha_id, um eine Freigabe anzufordern.

#Stornierung tatsächlich beantragen
fetch_url = "http://2captcha.com/res.php?key="+ config.service_key + "&action=get&id=" + captcha_id
print('Stornierung beantragen ...')
for __i in range(1, 10):
    time.sleep(5) # wait 5 sec.
    resp = requests.get(fetch_url)
    if resp.text[0:2] == 'OK':
        break
print('Google response token: ', resp.text[3:])

Ich habe die Details nicht untersucht, aber es scheint, dass "CHA_NOT_READY" in der Antwort zurückgegeben wird. Kommt es vor, wenn das Personal nicht zum Entsperren bereit ist? In diesem Fall handelt es sich um ein Problem. In meinem Fall habe ich es so implementiert, dass es mehrmals von vorne beginnt.

if resp.text[3:] == 'CHA_NOT_READY':
    print('Verarbeitung gescheitert')
    driver.quit()
    if count == 0:
        exit('Error: 2captcha is not ready')
    else:
        #Von vorn anfangen
        return getLoginedDriver(config,count-1)

Wenn das Token sicher zurückgegeben wird, legen Sie es im Textbereich ab und melden Sie sich an.

#Geben Sie den Token in das Textfeld ein
driver.find_element_by_id('g-recaptcha-response').send_keys(resp.text[3:])
time.sleep(INTERVAL)

driver.execute_script('document.querySelector(hoge).style.visibility = "hidden";') #Für diese Seite brauchte ich dies, um den Login-Button zu drücken
submit_button = driver.find_element_by_css_selector(hoge)
submit_button.click()

Lauf

Wie Sie sehen können, wenn ich es versuche, ist das erstaunlich ... Vielen Dank für den wunderbaren Service.

Da das System jedoch vom Überleben dieses Dienstes abhängt, dachte ich erneut, dass ich nach Möglichkeit kein Scraping durchführen möchte. Wir verhandeln mit dem Betrieb dieser Website, um die API vorzubereiten, aber ich hoffe, dass es gut geht.

Komplett

Da reCAPTCHA möglicherweise nicht herauskommt, wird es abgeschlossen, wenn wir diesen Fall behandeln können. Jetzt funktioniert es nur noch durch Ausführen (ohne reCAPTCHA abzubrechen).

Jetzt muss ich das nur noch auf dem Server ausführen, nicht auf dem lokalen PC ... Es ist ein weiterer Berg, weil er im kopflosen Modus nicht funktioniert.

Mehr dazu.

Recommended Posts

Täglich automatisch die reCAPTCHA-Site abkratzen (5/7: 2captcha)
Jeden Tag automatisch die reCAPTCHA-Site abkratzen (2/7: Scraping)
Die reCAPTCHA-Site wird täglich automatisch abgekratzt (6/7: Containerisierung)
Automatische tägliche Überprüfung der reCAPTCHA-Site (4/7: S3-Dateiverarbeitung)
Kratzen Sie die reCAPTCHA-Site jeden Tag automatisch ab (1/7: Aufbau der Python-Umgebung)
Automatische tägliche Überprüfung der reCAPTCHA-Site (3/7: xls-Dateiverarbeitung)
Die endgültige Ausgabe von Python Scraping! (Zielort: Große Kamera)
Ich habe versucht, die Werbung für die Raubkopien-Website zu kratzen