
Rajinder Singh
Deep Learning Researcher

Tantangan CAPTCHA, seperti Google reCAPTCHA, umumnya digunakan oleh situs web untuk memblokir bot dan mencegah akses otomatis ke konten mereka. Untuk melewati tantangan tersebut secara terprogram, Anda dapat menggunakan layanan seperti Capsolver yang menawarkan solusi berbasis API untuk menyelesaikan CAPTCHA ini.
Dalam panduan ini, kami akan menunjukkan kepada Anda cara:
Di C#, kelas HttpClient umumnya digunakan untuk mengirimkan permintaan HTTP dan menerima respons dari situs web. Anda dapat menggabungkannya dengan parser HTML seperti HtmlAgilityPack untuk mengekstrak data dari halaman web.
Install-Package HtmlAgilityPack
Install-Package Newtonsoft.Json
Mari kita kikis kutipan dari situs web Quotes to Scrape menggunakan HttpClient dan HtmlAgilityPack.
using System;
using System.Net.Http;
using System.Threading.Tasks;
using HtmlAgilityPack;
class Program
{
private static readonly HttpClient client = new HttpClient();
static async Task Main(string[] args)
{
string url = "http://quotes.toscrape.com/";
// Kirim permintaan GET ke halaman
HttpResponseMessage response = await client.GetAsync(url);
if (response.IsSuccessStatusCode)
{
// Parse konten halaman menggunakan HtmlAgilityPack
string pageContent = await response.Content.ReadAsStringAsync();
HtmlDocument htmlDoc = new HtmlDocument();
htmlDoc.LoadHtml(pageContent);
// Temukan semua kutipan di halaman
var quotes = htmlDoc.DocumentNode.SelectNodes("//span[@class='text']");
// Cetak setiap kutipan
foreach (var quote in quotes)
{
Console.WriteLine(quote.InnerText);
}
}
else
{
Console.WriteLine($"Gagal mengambil halaman. Kode Status: {response.StatusCode}");
}
}
}
text.Saat situs web menggunakan reCAPTCHA v3 & reCaptcha v2 untuk keamanan, Anda dapat menyelesaikan CAPTCHA menggunakan Capsolver API. Berikut ini adalah cara Anda dapat mengintegrasikan Capsolver dengan HttpClient untuk menyelesaikan tantangan reCAPTCHA.
Install-Package Newtonsoft.Json
Pada bagian ini, kita akan menunjukkan cara menyelesaikan tantangan reCAPTCHA v2 menggunakan Capsolver API dan HttpClient.
using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json.Linq;
class Program
{
private static readonly string apiUrl = "https://api.capsolver.com";
private static readonly string clientKey = "YOUR_API_KEY"; // Ganti dengan Capsolver API Key Anda
static async Task Main(string[] args)
{
try
{
// Langkah 1: Buat tugas untuk menyelesaikan reCAPTCHA v3
string taskId = await CreateTask();
Console.WriteLine("ID Tugas: " + taskId);
// Langkah 2: Ambil hasil tugas
string taskResult = await GetTaskResult(taskId);
Console.WriteLine("Hasil Tugas (Token CAPTCHA): " + taskResult);
}
catch (Exception ex)
{
Console.WriteLine("Kesalahan: " + ex.Message);
}
}
// Metode untuk membuat tugas pemecahan CAPTCHA baru
private static async Task<string> CreateTask()
{
using (HttpClient client = new HttpClient())
{
// Beban permintaan
var requestBody = new
{
clientKey = clientKey,
task = new
{
type = "ReCaptchaV2TaskProxyLess", // Jenis tugas untuk reCAPTCHA v3 tanpa proxy
websiteURL = "", // URL situs web untuk menyelesaikan CAPTCHA
websiteKey = "" // Kunci situs reCAPTCHA
}
};
// Kirim permintaan untuk membuat tugas
var content = new StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(requestBody), Encoding.UTF8, "application/json");
HttpResponseMessage response = await client.PostAsync($"{apiUrl}/createTask", content);
string responseContent = await response.Content.ReadAsStringAsync();
if (!response.IsSuccessStatusCode)
{
throw new Exception("Gagal membuat tugas: " + responseContent);
}
JObject jsonResponse = JObject.Parse(responseContent);
if (jsonResponse["errorId"].ToString() != "0")
{
throw new Exception("Kesalahan membuat tugas: " + jsonResponse["errorDescription"]);
}
// Kembalikan ID tugas yang akan digunakan di langkah selanjutnya
return jsonResponse["taskId"].ToString();
}
}
// Metode untuk mengambil hasil dari tugas pemecahan CAPTCHA
private static async Task<string> GetTaskResult(string taskId)
{
using (HttpClient client = new HttpClient())
{
// Beban permintaan
var requestBody = new
{
clientKey = clientKey,
taskId = taskId
};
var content = new StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(requestBody), Encoding.UTF8, "application/json");
// Polling untuk hasil tugas setiap 5 detik
while (true)
{
HttpResponseMessage response = await client.PostAsync($"{apiUrl}/getTaskResult", content);
string responseContent = await response.Content.ReadAsStringAsync();
if (!response.IsSuccessStatusCode)
{
throw new Exception("Gagal mendapatkan hasil tugas: " + responseContent);
}
JObject jsonResponse = JObject.Parse(responseContent);
if (jsonResponse["errorId"].ToString() != "0")
{
throw new Exception("Kesalahan mendapatkan hasil tugas: " + jsonResponse["errorDescription"]);
}
// Jika tugas siap, kembalikan token CAPTCHA
if (jsonResponse["status"].ToString() == "ready")
{
return jsonResponse["solution"]["gRecaptchaResponse"].ToString();
}
// Tunggu 5 detik sebelum memeriksa lagi
Console.WriteLine("Tugas masih diproses, menunggu 5 detik...");
await Task.Delay(5000);
}
}
}
}
Metode CreateTask:
/createTask Capsolver untuk membuat tugas baru untuk menyelesaikan tantangan reCAPTCHA v2.clientKey, websiteURL, websiteKey, dan menentukan jenis tugas sebagai ReCaptchaV2TaskProxyLess.taskId, yang akan digunakan untuk mengambil hasil tugas.Metode GetTaskResult:
/getTaskResult untuk memeriksa hasil dari tugas yang dibuat sebelumnya.status: siap).gRecaptchaResponse, yang dapat digunakan untuk melewati CAPTCHA.Pada bagian ini, kita akan menunjukkan cara menyelesaikan tantangan reCAPTCHA v3 menggunakan Capsolver API dan HttpClient.
using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json.Linq;
class Program
{
private static readonly string apiUrl = "https://api.capsolver.com";
private static readonly string clientKey = "YOUR_API_KEY"; // Ganti dengan Capsolver API Key Anda
static async Task Main(string[] args)
{
try
{
// Langkah 1: Buat tugas untuk menyelesaikan reCAPTCHA v3
string taskId = await CreateTask();
Console.WriteLine("ID Tugas: " + taskId);
// Langkah 2: Ambil hasil tugas
string taskResult = await GetTaskResult(taskId);
Console.WriteLine("Hasil Tugas (Token CAPTCHA): " + taskResult);
}
catch (Exception ex)
{
Console.WriteLine("Kesalahan: " + ex.Message);
}
}
// Metode untuk membuat tugas pemecahan CAPTCHA baru
private static async Task<string> CreateTask()
{
using (HttpClient client = new HttpClient())
{
// Beban permintaan
var requestBody = new
{
clientKey = clientKey,
task = new
{
type = "ReCaptchaV3TaskProxyLess", // Jenis tugas untuk reCAPTCHA v3 tanpa proxy
websiteURL = "", // URL situs web untuk menyelesaikan CAPTCHA
websiteKey = "" // Kunci situs reCAPTCHA
}
};
// Kirim permintaan untuk membuat tugas
var content = new StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(requestBody), Encoding.UTF8, "application/json");
HttpResponseMessage response = await client.PostAsync($"{apiUrl}/createTask", content);
string responseContent = await response.Content.ReadAsStringAsync();
if (!response.IsSuccessStatusCode)
{
throw new Exception("Gagal membuat tugas: " + responseContent);
}
JObject jsonResponse = JObject.Parse(responseContent);
if (jsonResponse["errorId"].ToString() != "0")
{
throw new Exception("Kesalahan membuat tugas: " + jsonResponse["errorDescription"]);
}
// Kembalikan ID tugas yang akan digunakan di langkah selanjutnya
return jsonResponse["taskId"].ToString();
}
}
// Metode untuk mengambil hasil dari tugas pemecahan CAPTCHA
private static async Task<string> GetTaskResult(string taskId)
{
using (HttpClient client = new HttpClient())
{
// Beban permintaan
var requestBody = new
{
clientKey = clientKey,
taskId = taskId
};
var content = new StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(requestBody), Encoding.UTF8, "application/json");
// Polling untuk hasil tugas setiap 5 detik
while (true)
{
HttpResponseMessage response = await client.PostAsync($"{apiUrl}/getTaskResult", content);
string responseContent = await response.Content.ReadAsStringAsync();
if (!response.IsSuccessStatusCode)
{
throw new Exception("Gagal mendapatkan hasil tugas: " + responseContent);
}
JObject jsonResponse = JObject.Parse(responseContent);
if (jsonResponse["errorId"].ToString() != "0")
{
throw new Exception("Kesalahan mendapatkan hasil tugas: " + jsonResponse["errorDescription"]);
}
// Jika tugas siap, kembalikan token CAPTCHA
if (jsonResponse["status"].ToString() == "ready")
{
return jsonResponse["solution"]["gRecaptchaResponse"].ToString();
}
// Tunggu 5 detik sebelum memeriksa lagi
Console.WriteLine("Tugas masih diproses, menunggu 5 detik...");
await Task.Delay(5000);
}
}
}
}
Metode CreateTask:
/createTask Capsolver untuk membuat tugas baru untuk menyelesaikan tantangan reCAPTCHA v3.clientKey, websiteURL, websiteKey, dan menentukan jenis tugas sebagai ReCaptchaV3TaskProxyLess.taskId, yang akan digunakan untuk mengambil hasil tugas.Metode GetTaskResult:
/getTaskResult untuk memeriksa hasil dari tugas yang dibuat sebelumnya.status: siap).gRecaptchaResponse, yang dapat digunakan untuk melewati CAPTCHA.Saat menggunakan alat web scraping di C#, selalu ikuti praktik terbaik berikut ini:
robots.txt: Pastikan situs web mengizinkan web scraping dengan memeriksa file robots.txt.User-Agent, ke permintaan HTTP Anda.Dengan menggunakan HttpClient untuk web scraping dan Capsolver untuk pemecahan CAPTCHA, Anda dapat secara efektif mengotomatiskan interaksi dengan situs web yang menggunakan tantangan CAPTCHA. Selalu pastikan bahwa aktivitas web scraping Anda mematuhi persyaratan layanan dan persyaratan hukum situs web target.
Selamat mengikis!
Panduan ini mengintegrasikan web scraping menggunakan HtmlAgilityPack dan menunjukkan cara menangani tantangan reCAPTCHA dengan Capsolver, hanya menggunakan HttpClient di C#.
Pelajari cara mengelola reCAPTCHA selama pengambilan data e-commerce dengan alur kerja yang sesuai aturan, diagnosa, contoh dari CapSolver, dan pengendalian risiko yang nyata.

Pelajari bagaimana ekstraksi data yang didukung AI bekerja dari pengambilan data dari web dan menyelesaikan CAPTCHA hingga pembersihan HTML, parsing LLM, dan generasi JSON terstruktur. Eksplor strategi menghindari bot, kerangka kerja ekstraksi semantik seperti AXE, dan pipa pengambilan data web AI yang dapat diskalakan.
