Menangani JavaScript dan Tindakan Anti-Scraping
Gunakan Playwright/Selenium untuk konten yang dirender JS dan pembatasan laju.
Menangani JavaScript dan Tindakan Anti-Scraping adalah pelajaran Python Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Python Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Python Academy mencakup 4 pelajaran total.
Mengapa JavaScript Penting
Situs web modern merender konten dengan JavaScript setelah halaman dimuat. Scraper HTML statis seperti requests+BS4 hanya melihat kerangka halaman, bukan DOM yang telah dirender.
# Static scraper sees:
# <div id="app"></div>
# Rendered page has:
# <div id="app">
# <h1>Product List</h1>
# <ul>... dynamically loaded items ...</ul>
# </div>Playwright untuk Python
Playwright mengendalikan peramban nyata (Chromium, Firefox, WebKit) secara terprogram. Playwright menunggu JavaScript selesai dijalankan sebelum mengekstrak konten.
# pip install playwright
# playwright install
import asyncio
from playwright.async_api import async_playwright
async def main():
async with async_playwright() as p:
browser = await p.chromium.launch()
page = await browser.new_page()
await page.goto("https://example.com")
title = await page.inner_text("h1")
print(title)
await browser.close()
asyncio.run(main())Menunggu Elemen
Gunakan page.wait_for_selector() untuk menunggu hingga elemen muncul di DOM sebelum mengekstrak data.
from playwright.async_api import async_playwright
import asyncio
async def scrape():
async with async_playwright() as p:
browser = await p.chromium.launch()
page = await browser.new_page()
await page.goto("https://spa-example.com")
await page.wait_for_selector(".product-list")
items = await page.query_selector_all(".product-item")
texts = [await i.inner_text() for i in items]Selenium
Selenium adalah pustaka otomasi peramban yang lebih lama. Playwright lebih disarankan untuk proyek baru karena dukungan asinkron dan kecepatannya lebih baik.
# pip install selenium
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
driver.get("https://example.com")
elem = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.CSS_SELECTOR, "h1"))
)
print(elem.text)
driver.quit()Mode Tanpa Antarmuka
Jalankan peramban dalam mode tanpa antarmuka (tanpa jendela yang terlihat) untuk scraping di sisi server.
from playwright.async_api import async_playwright
import asyncio
async def main():
async with async_playwright() as p:
browser = await p.chromium.launch(headless=True) # no window
page = await browser.new_page()
await page.goto("https://example.com")
html = await page.content()
await browser.close()Mencegat Permintaan Jaringan
Playwright dapat mencegat dan meniru permintaan jaringan, yang berguna untuk memblokir iklan atau pelacak maupun menangkap respons API secara langsung.
from playwright.async_api import async_playwright
import asyncio
async def main():
async with async_playwright() as p:
browser = await p.chromium.launch()
page = await browser.new_page()
await page.route("**/*.{png,jpg,css}", lambda route: route.abort())
await page.goto("https://example.com") # loads 3x fasterPembatasan Laju dan Jeda
Tirukan perilaku manusia: tambahkan jeda acak di antara permintaan dan batasi lajunya agar tidak memicu sistem antip bot.
import time, random
def polite_scrape(urls):
for url in urls:
fetch(url)
time.sleep(random.uniform(1, 3)) # 1-3 s random delayRotasi Agen Pengguna
Rotasikan string agen pengguna agar tidak diblokir berdasarkan UA scraper bawaan.
import requests, random
USER_AGENTS = [
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) ...",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) ...",
]
def fetch(url):
return requests.get(url, headers={"User-Agent": random.choice(USER_AGENTS)})Cookie dan Sesi
Pertahankan cookie sesi agar tetap login di antara berbagai permintaan. Baik requests Session maupun Playwright menangani cookie secara otomatis.
import requests
with requests.Session() as s:
s.post("https://example.com/login", data={"user":"me","pass":"pw"})
# session cookie kept automatically:
dashboard = s.get("https://example.com/dashboard")CAPTCHA dan Pertimbangan Hukum
CAPTCHA adalah tindakan antip bot. Menyelesaikannya secara terprogram memang memungkinkan secara teknis (2captcha, anti-captcha), tetapi menimbulkan persoalan etika dan hukum. Selalu tinjau robots.txt dan Ketentuan Layanan situs sebelum melakukan scraping.
# Before scraping:
# 1. Check robots.txt: https://example.com/robots.txt
# 2. Review the Terms of Service for "scraping" or "automated access" clauses
# 3. Only scrape public data
# 4. Honour Crawl-delay directives
# 5. Cache responses to avoid repeated hitsTangkapan Layar dan PDF dengan Playwright
Playwright dapat mengambil tangkapan layar atau mencetak halaman ke PDF — berguna untuk pengujian visual dan pengarsipan.
from playwright.async_api import async_playwright
import asyncio
async def main():
async with async_playwright() as p:
browser = await p.chromium.launch()
page = await browser.new_page()
await page.goto("https://example.com")
await page.screenshot(path="page.png", full_page=True)
await page.pdf(path="page.pdf")
await browser.close()Pemeriksaan Singkat
Mengapa requests + BeautifulSoup gagal pada banyak situs web modern?
Ringkasan
Gunakan Playwright atau Selenium untuk halaman yang dirender oleh JavaScript. Jalankan dalam mode tanpa antarmuka di server. Tambahkan jeda dan rotasikan agen pengguna agar tidak diblokir. Mencegat permintaan jaringan untuk memblokir pelacak. Selalu patuhi robots.txt dan Ketentuan Layanan.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Menangani JavaScript dan Tindakan Anti-Scraping” gratis?
Ya — teks lengkap “Menangani JavaScript dan Tindakan Anti-Scraping” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Python Academy, upgrade ke CoddyKit PRO. Kursus Python Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Menangani JavaScript dan Tindakan Anti-Scraping”?
Gunakan Playwright/Selenium untuk konten yang dirender JS dan pembatasan laju. Kamu berlatih Python Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Python Academy?
Tidak diperlukan pengalaman sebelumnya. Python Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.
Berapa lama pelajaran “Menangani JavaScript dan Tindakan Anti-Scraping” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Python Academy ini?
Ya. Setiap pelajaran Python Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Permintaan HTTP dengan requests dan httpx
- Mengurai HTML dengan BeautifulSoup
- Membangun Spider Scrapy
- Menangani JavaScript dan Tindakan Anti-Scraping