Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk memintas recaptcha
Tidak kira berapa kali orang menulis bahawa captcha telah lama hidup lebih lama dan tidak lagi berfungsi dengan berkesan seperti yang diingini oleh pembangunnya pada mulanya, bagaimanapun, pemilik sumber Internet terus untuk melindungi projek mereka dengan captcha. Tetapi apakah captcha yang paling popular pada zaman kita?
Penjelasan – semua kod yang akan dibentangkan dalam artikel ini telah disediakan berdasarkan dokumentasi API perkhidmatan pengecaman captcha 2captcha
Ia adalah recaptcha. Recaptcha V2, V3, dsb., yang telah dicipta oleh Google pada tahun 2007. Sudah bertahun-tahun sejak recaptcha pertama muncul, tetapi ia terus mengekalkan kalungan, secara berkala kehilangan tempat kepada pesaing dan kemudian memenanginya semula. Tetapi recaptcha tidak pernah mengambil tempat ke-2 dalam populariti, walaupun terdapat semua ketidaksempurnaannya di hadapan rangkaian saraf.
Terdapat sejumlah besar percubaan untuk mencipta "pembunuh recaptcha", ada yang kurang berjaya, ada yang hanya kelihatan seperti ancaman untuk menangkap semula, tetapi sebenarnya ternyata tiada. Namun hakikatnya tetap bahawa keinginan pesaing untuk melakukan sesuatu yang lebih baik dan lebih dipercayai daripada recaptcha menunjukkan popularitinya.
Jika anda tidak mempercayai mana-mana modul pihak ketiga, saya telah menyediakan kod paling universal yang boleh dimasukkan ke dalam skrip Python anda dengan pengubahsuaian kecil dan menyelesaikan recaptcha secara automatik. Berikut ialah kod itu sendiri:
permintaan import
masa import
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}")
Walau bagaimanapun, sebelum menggunakan skrip yang disediakan, baca dengan teliti pengesyoran perkhidmatan untuk mengenali jenis recaptcha tertentu untuk mengetahui cara kod ini berfungsi.
Selain itu, jangan lupa untuk memasukkan kunci API anda dalam kod dan, sudah tentu, pasang modul yang diperlukan.
Seperti dalam kes Python, bagi mereka yang tidak suka penyelesaian siap, di bawah adalah skrip untuk menyelesaikan captcha menggunakan bahasa pengaturcaraan nod js. Saya mengingatkan anda untuk tidak lupa memasang modul yang diperlukan untuk kod berfungsi, termasuk:
aksios
Anda boleh memasangnya menggunakan arahan ini –
npm pasang axios
Berikut ialah kod itu sendiri:
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}`); })();
Selain itu, jangan lupa untuk memasukkan kunci API anda ke dalam kod, bukannya
"'KUNCI_API_ANDA_2CAPTCHA'"
Baiklah, bagi mereka yang tidak biasa menggunakan modul siap, berikut adalah kod untuk penyepaduan secara langsung. Kod ini menggunakan fungsi PHP standard seperti file_get_contents dan json_decode, berikut ialah kod itu sendiri:
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';Oleh itu, menggunakan contoh yang diberikan, anda boleh menyelesaikan kebanyakan isu yang berkaitan dengan pengecaman semula. Anda boleh bertanya soalan dalam komen jika masih ada!
Atas ialah kandungan terperinci Bagaimana untuk memintas recaptcha. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!