
Rajinder Singh
Deep Learning Researcher

Web scraping adalah teknik penting untuk mengekstrak data dari situs web, tetapi aplikasi web modern seringkali mengimplementasikan langkah-langkah keamanan seperti tantangan CAPTCHA untuk mencegah akses otomatis. Tantangan CAPTCHA, seperti Google reCAPTCHA, dirancang untuk membedakan antara pengguna manusia dan bot, sehingga membuat skrip otomatis sulit untuk mengikis konten secara efektif.
Untuk mengatasi hambatan ini, pengembang dapat memanfaatkan alat dan layanan yang menyederhanakan permintaan HTTP dan menangani pemecahan CAPTCHA. RestSharp adalah library C# yang kuat dan mudah digunakan yang menyederhanakan proses membuat permintaan HTTP ke API RESTful. Bila digabungkan dengan parser HTML seperti HtmlAgilityPack, ia menjadi solusi yang kuat untuk tugas web scraping.

Namun, menghadapi tantangan CAPTCHA selama scraping dapat menghentikan proses otomatisasi Anda. Di sinilah Capsolver berperan. Capsolver menawarkan solusi berbasis API untuk memecahkan CAPTCHA secara terprogram, memungkinkan skrip scraping Anda untuk melewati tantangan ini dan mengakses konten yang diinginkan dengan lancar.
Dalam panduan komprehensif ini, kami akan memandu Anda melalui:
Dalam C#, RestSharp adalah library populer untuk menangani permintaan HTTP dan berinteraksi dengan API RESTful. Ini menyederhanakan banyak aspek komunikasi HTTP dibandingkan dengan HttpClient bawaan. Anda dapat menggabungkan RestSharp dengan parser HTML seperti HtmlAgilityPack untuk mengekstrak data dari halaman web.
Instal library RestSharp menggunakan NuGet Package Manager:
Install-Package RestSharp
Instal library HtmlAgilityPack untuk membantu mengurai konten HTML:
Install-Package HtmlAgilityPack
Instal Newtonsoft.Json untuk menangani respons JSON:
Install-Package Newtonsoft.Json
Mari kita kikis kutipan dari situs web Quotes to Scrape menggunakan RestSharp dan HtmlAgilityPack.
using System;
using System.Threading.Tasks;
using HtmlAgilityPack;
using RestSharp;
class Program
{
static async Task Main(string[] args)
{
string url = "http://quotes.toscrape.com/";
// Inisialisasi klien RestSharp
var client = new RestClient(url);
// Buat permintaan GET
var request = new RestRequest(Method.GET);
// Jalankan permintaan
var response = await client.ExecuteAsync(request);
if (response.IsSuccessful)
{
// Parse konten halaman menggunakan HtmlAgilityPack
HtmlDocument htmlDoc = new HtmlDocument();
htmlDoc.LoadHtml(response.Content);
// 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}");
}
}
}
RestClient dengan URL target dan membuat RestRequest untuk metode GET.text.Ketika situs web menggunakan reCAPTCHA v2 atau v3 untuk keamanan, Anda dapat memecahkan CAPTCHA menggunakan API Capsolver. Berikut adalah cara Anda dapat mengintegrasikan Capsolver dengan RestSharp untuk memecahkan tantangan reCAPTCHA.
Newtonsoft.Json digunakan untuk menangani parsing JSON dari respons Capsolver:
Install-Package Newtonsoft.Json
Pada bagian ini, kita akan menunjukkan cara memecahkan tantangan reCAPTCHA v2 menggunakan API Capsolver dan RestSharp.
using System;
using System.Threading.Tasks;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using RestSharp;
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 memecahkan reCAPTCHA v2
string taskId = await CreateTask();
Console.WriteLine("ID Tugas: " + taskId);
// Langkah 2: Ambil hasil dari 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()
{
// Inisialisasi klien RestSharp
var client = new RestClient(apiUrl);
// Payload permintaan
var requestBody = new
{
clientKey = clientKey,
task = new
{
type = "ReCaptchaV2TaskProxyLess", // Jenis tugas untuk reCAPTCHA v2 tanpa proxy
websiteURL = "https://www.example.com", // URL situs web untuk memecahkan CAPTCHA
websiteKey = "SITE_KEY_HERE" // Kunci situs reCAPTCHA
}
};
// Buat permintaan POST
var request = new RestRequest("createTask", Method.POST);
request.AddJsonBody(requestBody);
// Jalankan permintaan
var response = await client.ExecuteAsync(request);
if (!response.IsSuccessful)
{
throw new Exception("Gagal membuat tugas: " + response.Content);
}
JObject jsonResponse = JObject.Parse(response.Content);
if (jsonResponse["errorId"].ToString() != "0")
{
throw new Exception("Kesalahan membuat tugas: " + jsonResponse["errorDescription"]);
}
// Kembalikan ID tugas yang akan digunakan pada langkah selanjutnya
return jsonResponse["taskId"].ToString();
}
// Metode untuk mengambil hasil dari tugas pemecahan CAPTCHA
private static async Task<string> GetTaskResult(string taskId)
{
// Inisialisasi klien RestSharp
var client = new RestClient(apiUrl);
// Payload permintaan
var requestBody = new
{
clientKey = clientKey,
taskId = taskId
};
// Buat permintaan POST
var request = new RestRequest("getTaskResult", Method.POST);
request.AddJsonBody(requestBody);
// Polling untuk hasil dari tugas setiap 5 detik
while (true)
{
var response = await client.ExecuteAsync(request);
if (!response.IsSuccessful)
{
throw new Exception("Gagal mendapatkan hasil tugas: " + response.Content);
}
JObject jsonResponse = JObject.Parse(response.Content);
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:
RestClient dan membuat RestRequest untuk titik akhir createTask dengan metode POST.clientKey, websiteURL, websiteKey, dan menentukan jenis tugas sebagai ReCaptchaV2TaskProxyLess.taskId.Metode GetTaskResult:
RestClient dan membuat RestRequest untuk titik akhir getTaskResult dengan metode POST.status: ready).gRecaptchaResponse, yang dapat digunakan untuk melewati CAPTCHA.Pada bagian ini, kita akan menunjukkan cara memecahkan tantangan reCAPTCHA v3 menggunakan API Capsolver dan RestSharp.
using System;
using System.Threading.Tasks;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using RestSharp;
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 memecahkan reCAPTCHA v3
string taskId = await CreateTask();
Console.WriteLine("ID Tugas: " + taskId);
// Langkah 2: Ambil hasil dari 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()
{
// Inisialisasi klien RestSharp
var client = new RestClient(apiUrl);
// Payload permintaan
var requestBody = new
{
clientKey = clientKey,
task = new
{
type = "ReCaptchaV3TaskProxyLess", // Jenis tugas untuk reCAPTCHA v3 tanpa proxy
websiteURL = "https://www.example.com", // URL situs web untuk memecahkan CAPTCHA
websiteKey = "SITE_KEY_HERE", // Kunci situs reCAPTCHA
minScore = 0.3, // Skor minimum yang diinginkan
pageAction = "your_action" // Nama tindakan yang didefinisikan di situs
}
};
// Buat permintaan POST
var request = new RestRequest("createTask", Method.POST);
request.AddJsonBody(requestBody);
// Jalankan permintaan
var response = await client.ExecuteAsync(request);
if (!response.IsSuccessful)
{
throw new Exception("Gagal membuat tugas: " + response.Content);
}
JObject jsonResponse = JObject.Parse(response.Content);
if (jsonResponse["errorId"].ToString() != "0")
{
throw new Exception("Kesalahan membuat tugas: " + jsonResponse["errorDescription"]);
}
// Kembalikan ID tugas yang akan digunakan pada langkah selanjutnya
return jsonResponse["taskId"].ToString();
}
// Metode untuk mengambil hasil dari tugas pemecahan CAPTCHA
private static async Task<string> GetTaskResult(string taskId)
{
// Inisialisasi klien RestSharp
var client = new RestClient(apiUrl);
// Payload permintaan
var requestBody = new
{
clientKey = clientKey,
taskId = taskId
};
// Buat permintaan POST
var request = new RestRequest("getTaskResult", Method.POST);
request.AddJsonBody(requestBody);
// Polling untuk hasil dari tugas setiap 5 detik
while (true)
{
var response = await client.ExecuteAsync(request);
if (!response.IsSuccessful)
{
throw new Exception("Gagal mendapatkan hasil tugas: " + response.Content);
}
JObject jsonResponse = JObject.Parse(response.Content);
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:
RestClient dan RestRequest untuk titik akhir createTask.minScore dan pageAction khusus untuk reCAPTCHA v3.taskId.Metode GetTaskResult:
Saat menggunakan alat web scraping di C#, selalu ikuti praktik terbaik ini:
robots.txt: Pastikan situs web mengizinkan web scraping dengan memeriksa file robots.txt.User-Agent, ke permintaan HTTP Anda.Dengan menggunakan RestSharp untuk web scraping dan Capsolver untuk memecahkan CAPTCHA, Anda dapat secara efektif mengotomatiskan interaksi dengan situs web yang menggunakan tantangan CAPTCHA. Selalu pastikan bahwa aktivitas web scraping Anda mematuhi ketentuan layanan situs web target dan persyaratan hukum.
Selamat mengikis!
Panduan captcha pengambilan data web untuk alur kerja data yang disetujui: pelajari jenis tantangan, pengelolaan API, konsistensi proxy, pengulangan, dan penggunaan yang bertanggung jawab.

API penyelesaian CAPTCHA cepat untuk otomatisasi: bandingkan alur kerja token, tantangan yang didukung, pemeriksaan latensi, dan integrasi CapSolver yang bertanggung jawab.
