CAPSOLVER
Blog
Web Scraping di C#: Tutorial Langkah-demi-Langkah di 2025

Web Scraping di C#: Tutorial Langkah demi Langkah di 2025

Logo of CapSolver

Anh Tuan

Data Science Expert

23-Jan-2025

webscraping, csharp, capsolver

Panduan ramah Anda untuk scraping situs web, menangani CAPTCHA, dan bahkan mengambil tangkapan layar!


Mengapa Web Scraping di C#?

C# bukan hanya untuk membangun aplikasi Windows atau game—ini juga merupakan kekuatan untuk web scraping! Dengan library seperti HtmlAgilityPack, Selenium, dan Puppeteer Sharp, Anda dapat mengekstrak data, mengotomatiskan interaksi, dan bahkan menyelesaikan CAPTCHA (ya, benar). Dalam tutorial ini, kita akan menggunakan https://www.scrapethissite.com/pages/ sebagai tempat bermain kita. Mari selami!


Langkah 1: Menyiapkan Proyek Anda

Pertama, buat aplikasi konsol C# baru. Kemudian, instal paket NuGet ini:

bash Copy
Install-Package HtmlAgilityPack        # Untuk parsing HTML
Install-Package Selenium.WebDriver     # Untuk otomatisasi browser
Install-Package PuppeteerSharp         # Untuk tangkapan layar & scraping tingkat lanjut
Install-Package Capsolver.SDK          # Untuk pemecahan CAPTCHA

Contoh 1: Scraping Halaman Dasar

Mari kita scraping data negara dari https://www.scrapethissite.com/pages/simple/.

csharp Copy
using HtmlAgilityPack;
using System.Net;

var url = "https://www.scrapethissite.com/pages/simple/";
var client = new WebClient();
client.Headers.Add("User-Agent", "Mozilla/5.0"); // Bersikap sopan!
var html = client.DownloadString(url);

var doc = new HtmlDocument();
doc.LoadHtml(html);

var countries = doc.DocumentNode.SelectNodes("//div[@class='country']");
foreach (var country in countries)
{
    var name = country.SelectSingleNode(".//h3").InnerText.Trim();
    var capital = country.SelectSingleNode(".//span[@class='country-capital']").InnerText.Trim();
    Console.WriteLine($"Negara: {name}, Ibu Kota: {capital}");
}

Ini mencetak semua negara dan ibu kotanya. Sederhana, kan?


Contoh 2: Menangani JavaScript dengan Selenium

Beberapa halaman membutuhkan browser nyata. Mari kita scraping halaman contoh AJAX menggunakan Selenium:

csharp Copy
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;

var options = new ChromeOptions();
options.AddArgument("--headless"); // Jalankan di latar belakang
using var driver = new ChromeDriver(options);

driver.Navigate().GoToUrl("https://www.scrapethissite.com/pages/ajax-javascript/");
var dynamicContent = driver.FindElement(By.CssSelector(".ajax-content")).Text;
Console.WriteLine($"Konten AJAX: {dynamicContent}");

Contoh 3: Memecahkan CAPTCHA dengan Capsolver

Mendapat CAPTCHA yang menghalangi jalan Anda? Gunakan Capsolver untuk melewati ReCaptchaV2. Begini caranya:

  1. Daftar untuk Capsolver, ambil kunci API Anda.
  2. Gunakan API untuk memecahkan CAPTCHA:
csharp Copy
using System;
using System.Net.Http;
using System.Threading.Tasks;
using System.Text;
using System.Text.Json;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using System.Threading;

namespace CapSolverSeleniumExample
{
    class Program
    {
        static async Task Main(string[] args)
        {
            string token = await GetCaptchaToken();
            using var driver = new ChromeDriver();
            driver.Navigate().GoToUrl("https://www.example.com");
            Thread.Sleep(5000);
            driver.ExecuteScript("document.getElementById('g-recaptcha-response').innerHTML = arguments[0];", token);
            var submitButton = driver.FindElement(By.Id("submit-button"));
            submitButton.Click();
            Thread.Sleep(5000);
            driver.Quit();
        }

        static async Task<string> GetCaptchaToken()
        {
            string apiKey = "YOUR_API_KEY";
            string siteKey = "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_kl-";
            string siteUrl = "https://www.example.com";
            using var client = new HttpClient();
            var payload = new
            {
                clientKey = apiKey,
                task = new
                {
                    type = "ReCaptchaV3TaskProxyLess",
                    websiteKey = siteKey,
                    websiteURL = siteUrl,
                    pageAction = "login"
                }
            };
            var requestContent = new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json");
            var createTaskResponse = await client.PostAsync("https://api.capsolver.com/createTask", requestContent);
            var createTaskResponseString = await createTaskResponse.Content.ReadAsStringAsync();
            using var createTaskJsonDoc = JsonDocument.Parse(createTaskResponseString);
            var root = createTaskJsonDoc.RootElement;
            if (!root.TryGetProperty("taskId", out var taskIdElement))
            {
                Console.WriteLine("Gagal membuat tugas: " + createTaskResponseString);
                return null;
            }
            int taskId = taskIdElement.GetInt32();
            while (true)
            {
                await Task.Delay(1000);
                var resultPayload = new { clientKey = apiKey, taskId = taskId };
                var resultContent = new StringContent(JsonSerializer.Serialize(resultPayload), Encoding.UTF8, "application/json");
                var getTaskResponse = await client.PostAsync("https://api.capsolver.com/getTaskResult", resultContent);
                var getTaskResponseString = await getTaskResponse.Content.ReadAsStringAsync();
                using var getTaskJsonDoc = JsonDocument.Parse(getTaskResponseString);
                var resultRoot = getTaskJsonDoc.RootElement;
                if (resultRoot.TryGetProperty("status", out var statusElement))
                {
                    string status = statusElement.GetString();
                    if (status == "ready")
                    {
                        if (resultRoot.TryGetProperty("solution", out var solutionElement) && solutionElement.TryGetProperty("gRecaptchaResponse", out var tokenElement))
                        {
                            return tokenElement.GetString();
                        }
                        return null;
                    }
                    if (status == "failed" || resultRoot.TryGetProperty("errorId", out _))
                    {
                        Console.WriteLine("Pemecahan gagal! respon: " + getTaskResponseString);
                        return null;
                    }
                }
            }
        }
    }
}

Berjalan mulus dengan Selenium untuk mengotomatiskan formulir yang sarat CAPTCHA!


Contoh 4: Mengambil Tangkapan Layar dengan Puppeteer Sharp

Ingin bukti visual dari scraping Anda? Ambil tangkapan layar:

csharp Copy
using PuppeteerSharp;

await new BrowserFetcher().DownloadAsync();
using var browser = await Puppeteer.LaunchAsync(new LaunchOptions { Headless = true });
using var page = await browser.NewPageAsync();

await page.GoToAsync("https://www.scrapethissite.com/pages/javascript/");
await page.ScreenshotAsync("screenshot.png");

Sempurna untuk debugging atau pengarsipan halaman.


Kiat Pro untuk Web Scraping 2025

  1. Hormati robots.txt: Periksa https://www.scrapethissite.com/robots.txt terlebih dahulu.
  2. Pembatasan tingkat: Tambahkan penundaan dengan Thread.Sleep(2000) untuk menghindari server yang kewalahan.
  3. Rotasi User-Agent: Tiru browser nyata untuk menghindari deteksi.
  4. Penanganan kesalahan: Bungkus kode dalam blok try-catch untuk masalah jaringan.

Pernyataan Kepatuhan: Informasi yang diberikan di blog ini hanya untuk tujuan informasi. CapSolver berkomitmen untuk mematuhi semua hukum dan peraturan yang berlaku. Penggunaan jaringan CapSolver untuk kegiatan ilegal, penipuan, atau penyalahgunaan sangat dilarang dan akan diselidiki. Solusi penyelesaian captcha kami meningkatkan pengalaman pengguna sambil memastikan kepatuhan 100% dalam membantu menyelesaikan kesulitan captcha selama pengambilan data publik. Kami mendorong penggunaan layanan kami secara bertanggung jawab. Untuk informasi lebih lanjut, silakan kunjungi Syarat Layanan dan Kebijakan Privasi.

Lebih lanjut

Larangan IP pada 2026: Bagaimana Cara Kerjanya dan Cara Praktis untuk Menghindarinya
Larangan IP pada 2026: Bagaimana Cara Kerjanya dan Cara Praktis untuk Mengelaknya

Pelajari cara menghindari pembatasan IP pada 2026 dengan panduan lengkap kami. Temukan teknik pemblokiran IP modern dan solusi praktis seperti proxy residensial dan solver CAPTCHA.

web scraping
Logo of CapSolver

Emma Foster

26-Jan-2026

Maxun dengan Integrasi CapSolver
Cara Menyelesaikan Captcha di Maxun dengan Integrasi CapSolver

Panduan praktis untuk mengintegrasikan CapSolver dengan Maxun dalam penggunaan nyata pengambilan data web. Pelajari cara mengelola reCAPTCHA, Cloudflare Turnstile, dan situs yang dilindungi CAPTCHA dengan menggunakan alur kerja pre-auth dan robot.

web scraping
Logo of CapSolver

Adélia Cruz

21-Jan-2026

Browser4 dengan Integrasi CapSolver
Cara menyelesaikan Captcha di Browser4 dengan integrasi CapSolver

Otomasi Browser4 dengan throughput tinggi dikombinasikan dengan CapSolver untuk menangani tantangan CAPTCHA dalam ekstraksi data web skala besar.

web scraping
Logo of CapSolver

Anh Tuan

21-Jan-2026

Alat Ekstraksi Data Terbaik yang Harus Digunakan pada 2026 (Perbandingan Lengkap)
Alat Ekstraksi Data Terbaik untuk 2026 (Perbandingan Lengkap)

Temukan alat ekstraksi data terbaik untuk 2026. Bandingkan platform terkemuka web scraping, ETL, dan berbasis AI untuk mengotomatisasi pengumpulan data dan alur kerja AI Anda.

AI
Logo of CapSolver

Emma Foster

21-Jan-2026

Selesaikan Tak Terbatas Captcha dengan Solver Captcha Terbaik
Menyelesaikan Captcha Tanpa Batas dengan Pemecah Captcha Terbaik

Pelajari cara menyelesaikan Captcha tak terbatas dengan lancar menggunakan solver Captcha terbaik, panduan rinci tentang mengatur dan mengotomasi solusi Captcha secara efektif

reCAPTCHA
Logo of CapSolver

Adélia Cruz

20-Jan-2026

Cara melewati verifikasi Cloudflare bahwa Anda manusia tanpa terjebak
Cara melewati verifikasi Cloudflare bahwa Anda manusia tanpa terjebak

Terjebak pada "memverifikasi bahwa Anda manusia" atau "Cloudflare Challenge"? Pelajari penyebab umum dan temukan solusi teknis untuk sistem otomatis agar melewati verifikasi setiap kali.

Cloudflare
Logo of CapSolver

Rajinder Singh

20-Jan-2026