Heim > Artikel > Backend-Entwicklung > So umgehen Sie Recaptcha
Egal wie oft geschrieben wurde, dass das Captcha längst überlebt hat und nicht mehr so effektiv funktioniert, wie seine Entwickler es sich ursprünglich gewünscht hätten, die Besitzer von Internetressourcen machen jedoch weiter ihre Projekte mit Captchas zu schützen. Aber was ist das beliebteste Captcha unserer Zeit?
Klarstellung – der gesamte Code, der in diesem Artikel vorgestellt wird, wurde auf der Grundlage der API-Dokumentation des Captcha-Erkennungsdienstes 2captcha erstellt
Es ist Recaptcha. Recaptcha V2, V3 usw., das 2007 von Google erstellt wurde. Es ist viele Jahre her, dass das erste Recaptcha erschien, aber es behält weiterhin seinen Siegeszug, verliert regelmäßig an Boden gegenüber der Konkurrenz und gewinnt ihn dann zurück. Aber Recaptcha hat trotz aller Unvollkommenheiten gegenüber neuronalen Netzen nie den zweiten Platz in der Beliebtheit eingenommen.
Es gab eine Vielzahl von Versuchen, einen „Recaptcha-Killer“ zu entwickeln, einige waren weniger erfolgreich, andere sahen nur wie eine Bedrohung für Recaptcha aus, stellten sich jedoch als nichts heraus. Dennoch bleibt die Tatsache bestehen, dass der Wunsch der Konkurrenten, etwas Besseres und Zuverlässigeres als Recaptcha zu tun, seine Beliebtheit zeigt.
Wenn Sie keinem Modul von Drittanbietern vertrauen, habe ich den universellsten Code vorbereitet, der mit geringfügigen Änderungen in Ihr Python-Skript eingefügt werden kann und das Recaptcha automatisch löst. Hier ist der Code selbst:
Anfragen importieren
Importzeit
API_KEY = 'Your_API_2Captcha_key' def solve_recaptcha_v2(site_key, url): payload = { 'key': API_KEY, 'method': 'userrecaptcha', 'googlekey': site_key, 'pageurl': url, 'json': 1 } response = requests.post('https://2captcha.com/in.php', data=payload) result = response.json() if result['status'] != 1: raise Exception(f"Error when sending captcha: {result['request']}") captcha_id = result['request'] while True: time.sleep(5) response = requests.get(f"https://2captcha.com/res.php?key={API_KEY}&action=get&id={captcha_id}&json=1") result = response.json() if result['status'] == 1: print("Captcha solved successfully.") return result['request'] elif result['request'] == 'CAPCHA_NOT_READY': print("The captcha has not been solved yet, waiting...") continue else: raise Exception(f"Error while solving captcha: {result['request']}") def solve_recaptcha_v3(site_key, url, action='verify', min_score=0.3): payload = { 'key': API_KEY, 'method': 'userrecaptcha', 'googlekey': site_key, 'pageurl': url, 'version': 'v3', 'action': action, 'min_score': min_score, 'json': 1 } response = requests.post('https://2captcha.com/in.php', data=payload) result = response.json() if result['status'] != 1: raise Exception(f"Error when sending captcha: {result['request']}") captcha_id = result['request'] while True: time.sleep(5) response = requests.get(f"https://2captcha.com/res.php?key={API_KEY}&action=get&id={captcha_id}&json=1") result = response.json() if result['status'] == 1: print("Captcha solved successfully.") return result['request'] elif result['request'] == 'CAPCHA_NOT_READY': print("The captcha has not been solved yet, waiting...") continue else: raise Exception(f"Error while solving captcha: {result['request']}") # Usage example for reCAPTCHA v2 site_key_v2 = 'your_site_key_v2' url_v2 = 'https://example.com' recaptcha_token_v2 = solve_recaptcha_v2(site_key_v2, url_v2) print(f"Received token for reCAPTCHA v2: {recaptcha_token_v2}") # Usage example for reCAPTCHA v3 site_key_v3 = 'your_site_key_v3' url_v3 = 'https://example.com' recaptcha_token_v3 = solve_recaptcha_v3(site_key_v3, url_v3) print(f"Received token for reCAPTCHA v3: {recaptcha_token_v3}")
Bevor Sie jedoch das bereitgestellte Skript verwenden, lesen Sie sorgfältig die Empfehlungen des Dienstes zur Erkennung eines bestimmten Recaptcha-Typs, um eine Vorstellung davon zu bekommen, wie dieser Code funktioniert.
Vergessen Sie außerdem nicht, Ihren API-Schlüssel in den Code einzufügen und natürlich die erforderlichen Module zu installieren.
Wie im Fall von Python finden Sie unten ein Skript zum Lösen eines Captchas mithilfe der Programmiersprache node js für diejenigen, die keine vorgefertigten Lösungen mögen. Ich erinnere Sie daran, nicht zu vergessen, die notwendigen Module zu installieren, damit der Code funktioniert, einschließlich:
Axios
Sie können es mit diesem Befehl installieren –
npm install axios
Hier ist der Code selbst:
const axios = require('axios'); const sleep = require('util').promisify(setTimeout); const API_KEY = 'YOUR_API_KEY_2CAPTCHA'; // Replace with your real API key // Function for reCAPTCHA v2 solution async function solveReCaptchaV2(siteKey, pageUrl) { try { // Sending a request for the captcha solution const sendCaptchaResponse = await axios.post(`http://2captcha.com/in.php`, null, { params: { key: API_KEY, method: 'userrecaptcha', googlekey: siteKey, pageurl: pageUrl, json: 1 } }); if (sendCaptchaResponse.data.status !== 1) { throw new Error(`Error when sending captcha: ${sendCaptchaResponse.data.request}`); } const requestId = sendCaptchaResponse.data.request; console.log(`Captcha sent, request ID: ${RequestId}`); // Waiting for the captcha solution while (true) { await sleep(5000); // Waiting 5 seconds before the next request const getResultResponse = await axios.get(`http://2captcha.com/res.php`, { params: { key: API_KEY, action: 'get', id: requestId, json: 1 } }); if (getResultResponse.data.status === 1) { console.log('Captcha solved successfully.'); return getResultResponse.data.request; } else if (getResultResponse.data.request === 'CAPCHA_NOT_READY') { console.log('The captcha has not been solved yet, waiting...'); } else { throw new Error(`Error while solving captcha: ${getResultResponse.data.request}`); } } } catch (error) { console.error(`An error occurred: ${error.message}`); } } // Function for reCAPTCHA v3 solution async function solveReCaptchaV3(siteKey, pageUrl, action = 'verify', minScore = 0.3) { try { // Sending a request for the captcha solution const sendCaptchaResponse = await axios.post(`http://2captcha.com/in.php`, null, { params: { key: API_KEY, method: 'userrecaptcha', googlekey: siteKey, pageurl: pageUrl, version: 'v3', action: action, min_score: minScore, json: 1 } }); if (sendCaptchaResponse.data.status !== 1) { throw new Error(`Error when sending captcha: ${sendCaptchaResponse.data.request}`); } const requestId = sendCaptchaResponse.data.request; console.log(`Captcha sent, request ID: ${RequestId}`); // Waiting for the captcha solution while (true) { await sleep(5000); // Waiting 5 seconds before the next request const getResultResponse = await axios.get(`http://2captcha.com/res.php`, { params: { key: API_KEY, action: 'get', id: requestId, json: 1 } }); if (getResultResponse.data.status === 1) { console.log('Captcha solved successfully.'); return getResultResponse.data.request; } else if (getResultResponse.data.request === 'CAPCHA_NOT_READY') { console.log('The captcha has not been solved yet, waiting...'); } else { throw new Error(`Error while solving captcha: ${getResultResponse.data.request}`); } } } catch (error) { console.error(`An error occurred: ${error.message}`); } } // Usage example for reCAPTCHA v2 (async () => { const siteKeyV2 = 'YOUR_SITE_KEY_V2'; // Replace with the real site key const pageUrlV2 = 'https://example.com '; // Replace with the real URL of the page const tokenV2 = await solveReCaptchaV2(siteKeyV2, pageUrlV2); console.log(`Received token for reCAPTCHA v2: ${tokenV2}`); })(); // Usage example for reCAPTCHA v3 (async () => { const siteKeyV3 = 'YOUR_SITE_KEY_V3'; // Replace with the real site key const pageUrlV3 = 'https://example.com '; // Replace with the real URL of the page const action = 'homepage'; // Replace with the corresponding action const MinScore = 0.5; // Set the minimum allowed score const tokenV3 = await solveReCaptchaV3(siteKeyV3, pageUrlV3, action, minScore); console.log(`Received token for reCAPTCHA v3: ${tokenV3}`); })();
Vergessen Sie außerdem nicht, Ihren API-Schlüssel anstelle von
in den Code einzufügen
"'YOUR_API_KEY_2CAPTCHA'"
Nun, für diejenigen, die es nicht gewohnt sind, vorgefertigte Module zu verwenden, gibt es hier den Code für die direkte Integration. Der Code verwendet Standard-PHP-Funktionen wie file_get_contents und json_decode, hier ist der Code selbst:
function solveRecaptchaV2($apiKey, $siteKey, $url) { $requestUrl = "http://2captcha.com/in.php?key={$apiKey}&method=userrecaptcha&googlekey={$siteKey}&pageurl={$url}&json=1"; $response = file_get_contents($requestUrl); $result = json_decode($response, true); if ($result['status'] != 1) { throw new Exception("Error when sending captcha: " . $result['request']); } $captchaId = $result['request']; while (true) { sleep(5); $resultUrl = "http://2captcha.com/res.php?key={$apiKey}&action=get&id={$captchaId}&json=1"; $response = file_get_contents($resultUrl); $result = json_decode($response, true); if ($result['status'] == 1) { return $result['request']; } elseif ($result['request'] == 'CAPCHA_NOT_READY') { continue; } else { throw new Exception("Error while solving captcha: " . $result['request']); } } } function solveRecaptchaV3($apiKey, $siteKey, $url, $action = 'verify', $minScore = 0.3) { $requestUrl = "http://2captcha.com/in.php?key={$apiKey}&method=userrecaptcha&googlekey={$siteKey}&pageurl={$url}&version=v3&action={$action}&min_score={$minScore}&json=1"; $response = file_get_contents($requestUrl); $result = json_decode($response, true); if ($result['status'] != 1) { throw new Exception("Error when sending captcha: " . $result['request']); } $captchaId = $result['request']; while (true) { sleep(5); $resultUrl = "http://2captcha.com/res.php?key={$apiKey}&action=get&id={$captchaId}&json=1"; $response = file_get_contents($resultUrl); $result = json_decode($response, true); if ($result['status'] == 1) { return $result['request']; } elseif ($result['request'] == 'CAPCHA_NOT_READY') { continue; } else { throw new Exception("Error while solving captcha: " . $result['request']); } } } // Usage example for reCAPTCHA v2 $apiKey = 'YOUR_API_KEY_2CAPTCHA'; $siteKeyV2 = 'YOUR_SITE_KEY_V2'; $urlV2 = 'https://example.com'; try { $tokenV2 = solveRecaptchaV2($apiKey, $siteKeyV2, $urlV2); echo "Received token for reCAPTCHA v2: {$tokenV2}\n"; } catch (Exception $e) { echo "Error: " . $e->getMessage() . "\n"; } // Usage example for reCAPTCHA v3 $siteKeyV3 = 'YOUR_SITE_KEY_V3'; $urlV3 = 'https://example.com'; $action = 'homepage'; // Specify the appropriate action $MinScore = 0.5; // Specify the minimum allowed score try { $tokenV3 = solveRecaptchaV3($apiKey, $siteKeyV3, $urlV3, $action, $minScore); echo "Received token for reCAPTCHA v3: {$tokenV3}\n"; } catch (Exception $e) { echo "Error: " . $e->getMessage() . "\n"; } ?> I also remind you of the need to replace some parameters in the code, in particular: $apiKey = 'YOUR_API_KEY_2CAPTCHA'; $siteKeyV2 = 'YOUR_SITE_KEY_V2'; $urlV2 = 'https://example.com';Somit können Sie anhand der angegebenen Beispiele die meisten Probleme im Zusammenhang mit der Recaptcha-Erkennung lösen. Fragen könnt ihr in den Kommentaren stellen, falls noch welche übrig sind!
Das obige ist der detaillierte Inhalt vonSo umgehen Sie Recaptcha. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!