Curl et Captcha

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Curl et Captcha

Re: Curl et Captcha

par zezet33 » 03 déc. 2011, 15:46

Bonjour,
As tu eu la solution a ton problème?

Merci de ton retour
zezet33

Curl et Captcha

par Mathieu52 » 25 sept. 2011, 02:11

Bonsoir à tous,

je vous explique un peu mon problème.
Tous les jours, je vais récupérer au moins 5 à 6 fois par jour des informations sur un site pour mon boss.

J'aimerais donc automatiser la chose, c'est-à-dire :
1) M'identifier sur le site
2) Récupérer les données
3) Traiter les données
4) M'envoyer le rapport par mail

J'ai commencé le script avec CURL mais je bloque déjà à l'étape 1.
Le soucis, c'est que lors de l'identification, il faut passer un Captcha (j'ai pris un abonnement à Decaptcher).
Le problème n'est pas la récupération du Captcha (cela marche) mais plutôt la session CURL (le captcha change à chaque session donc je n'ai jamais le bon).

Pour l'instant, je procède comme cela :
1) Je charge la page
2) Je récupère l'url de du Captcha
3) Je traite le Captcha
4) J'envoie les données // Mais l'url du Captcha a changé puisqu'il est généré au moment de l'envoi

Voici mon code source :

Code : Tout sélectionner

$urlLogin = 'http://monsite.fr/login.php'; $ch = curl_init($urlLogin); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_COOKIEJAR, $this->_cookieFilename); $result = curl_exec($ch); $captchaInstance = new Decaptcher(); // J'utilise XPath pour récupérer le champ src de l'image $imageSrc = myXpath("//form[@name="form"]/descendant::img[@alt="captcha"]/@src", $result) $captchaKey = $captchaInstance->getCaptcha($imageSrc); if ($captchaKey['error']) { return array( 'error' => true, 'msgError' => $captchaKey['errorMsg'], ); } $captchaKey = $captchaKey['result']; // Ensuite je m'identifie en mettant le captcha $postfield = array( 'pseudo' => $this->_username, 'passe' => $this->_password, 'action' => 'login', 'captcha' => $captchaKey, ); curl_setopt($ch, CURLOPT_POSTFIELDS, $postfield); curl_setopt($ch, CURLOPT_COOKIEFILE, $this->_cookieFilename); // Je pense que le Captcha est généré au moment de l'envoi (donc du curl_exec), donc la variable $captchaKey contient la valeur du captcha de la session précédente. Je me trompe ? $resultLogin = curl_exec($ch); curl_close($ch);
Quelqu'un a une idée de comment faire ?

J’espère qu'il y a une solution car cela me ferait gagner énormément de temps (1 à 2 heures par jour).

Merci et bonne soirée ;)