Jusqu'à la dernière fois, c'est devenu un programme qui peut atteindre l'objectif. Mais ... cette exigence exige que cela soit fait sur une base régulière tous les jours.
Normalement, vous pouvez exécuter le système de traitement par lots régulièrement avec cron, etc., mais cette fois ce n'est pas si facile.
Premièrement, les mesures reCAPTHCA. Quand je l'ai recherché, j'ai trouvé qu'il y avait un service russe appelé "2CAPTCHA".
C'est un service qui libère à distance reCAPTCHA. Il est exceptionnellement bon marché, avec une percée de 1000 fois et plusieurs centaines de yens. J'ai pensé que c'était un peu suspect, mais j'ai décidé de l'utiliser.
Créez un compte avec 2captcha et mettez de l'argent en solde. Vous ne serez pas facturé uniquement pour l'enregistrement et l'utilisation de votre carte de crédit, mais vous pouvez utiliser le service pour le montant que vous avez mis.
Je vais omettre comment l'utiliser car il y a d'autres personnes qui l'ont introduit.
https://tanuhack.com/pr-2captcha/
Cependant, je ne pouvais pas utiliser "PayU", donc j'ai utilisé paypal via "PayPro Global" et j'ai facturé 300 yens en premier. Au rythme actuel, cela semble aller environ 3000 fois.
Tout d'abord
--2 Obtention de la clé API du Captcha --Obtenir le reCAPTCHA google_site_key pour le site --Trouver "textarea # g-recaptcha-response" sur le site
Vous devez faire trois choses.
google_site_key est censé être un coup lorsque vous recherchez avec `data-sitekey sur le site ci-dessus, mais dans mon cas, c'était en javascript sur la source. J'ai l'impression de l'avoir trouvé en recherchant «recaptcha». (Au contraire, pour éviter les ruptures en utilisant ce service, il peut être bon de le rendre difficile à trouver ici ...)
La zone de texte a trouvé immédiatement # g-recaptcha-response. En raison du mécanisme, cela ne peut pas être changé ...
Comme vous pouvez le voir sur le site d'introduction ci-dessus, si la zone de texte est invisible, vous ne pouvez pas la saisir, utilisez donc javascript pour la visualiser.
De plus, sur mon site cible, la case à cocher reCAPTCHA elle-même était masquée. Le comportement était "appuyez sur le bouton de connexion pour obtenir reCAPTCHA (après l'annulation, appuyez à nouveau sur le bouton de connexion pour vous connecter)".
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="";')
Tout d'abord, récupérez le captcha_id comme suit. Je n'ai jamais eu d'erreur avec cela, mais cela se produira lors de la maintenance du service.
#Vérifiez si 2captcha est prêt
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:]
Utilisez ensuite ce captcha_id pour demander une libération.
#En fait, demander l'annulation
fetch_url = "http://2captcha.com/res.php?key="+ config.service_key + "&action=get&id=" + captcha_id
print('Demande d'annulation ...')
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:])
Je n'ai pas étudié les détails, mais il semble que "CHA_NOT_READY" puisse être retourné dans la réponse. Cela se produit-il lorsque le personnel n'est pas prêt à déverrouiller? Dans ce cas, c'est un problème, donc dans mon cas je l'ai implémenté pour recommencer plusieurs fois.
if resp.text[3:] == 'CHA_NOT_READY':
print('Le traitement a échoué')
driver.quit()
if count == 0:
exit('Error: 2captcha is not ready')
else:
#Recommencer
return getLoginedDriver(config,count-1)
Lorsque le jeton est renvoyé en toute sécurité, placez-le dans la zone de texte et connectez-vous.
#Entrez le jeton dans la zone de texte
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";') #Pour ce site, j'avais besoin de cela pour appuyer sur le bouton de connexion
submit_button = driver.find_element_by_css_selector(hoge)
submit_button.click()
Comme vous pouvez le voir, c'est incroyable ... Merci pour le merveilleux service.
Cependant, comme le système dépend de la survie de ce service, j'ai pensé à nouveau que je ne voulais pas faire de grattage si possible. Nous négocions avec le fonctionnement de ce site pour préparer l'API, mais j'espère que cela se passera bien.
Comme reCAPTCHA peut ne pas sortir, il sera terminé si nous pouvons gérer ce cas. Maintenant, cela fonctionne simplement en exécutant (sans annuler reCAPTCHA).
Tout ce que j'ai à faire maintenant est de l'exécuter sur le serveur, pas sur le PC local ... C'est une autre montagne car elle ne fonctionne pas en mode sans tête.
Plus à ce sujet.
Recommended Posts