Curl et Captcha
Posté : 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 :
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
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);
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