Håndtering af JavaScript og anti-scraping-foranstaltninger
Brug Playwright/Selenium til JS-renderet indhold og hastighedsbegrænsning.
Håndtering af JavaScript og anti-scraping-foranstaltninger er en gratis Python Academy-lektion på CoddyKit. Dette er lektion 4 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Python Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Python Academy-kurset indeholder 4 lektioner i alt.
Hvorfor JavaScript er vigtigt
Moderne websteder gengiver indhold med JavaScript efter sideindlæsningen. Statiske HTML-scrapere som requests+BS4 ser skelettet, ikke den gengivne DOM.
# Static scraper sees:
# <div id="app"></div>
# Rendered page has:
# <div id="app">
# <h1>Product List</h1>
# <ul>... dynamically loaded items ...</ul>
# </div>Playwright til Python
Playwright styrer en rigtig browser (Chromium, Firefox, WebKit) programmatisk. Det venter på, at JavaScript udføres, før indholdet udtrækkes.
# 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())Vent på elementer
Brug page.wait_for_selector() til at vente, indtil et element vises i DOM'en, før du udtrækker 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 er et ældre bibliotek til browserautomatisering. Playwright foretrækkes til nye projekter på grund af bedre understøttelse af asynkron behandling og højere hastighed.
# 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()Headless-tilstand
Kør browsere i headless-tilstand (uden et synligt vindue) til skrabning på serversiden.
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()Opfangning af netværksforespørgsler
Playwright kan opfange og simulere netværksforespørgsler, hvilket er nyttigt til at blokere reklamer og trackere eller hente API-svar direkte.
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 fasterHastighedsbegrænsning og forsinkelser
Efterlign menneskelig adfærd: Tilføj tilfældige forsinkelser mellem forespørgsler, og begræns hastigheden for at undgå at udløse anti-bot-systemer.
import time, random
def polite_scrape(urls):
for url in urls:
fetch(url)
time.sleep(random.uniform(1, 3)) # 1-3 s random delayRotation af User-Agent
Skift mellem User-Agent-strenge for at undgå at blive blokeret på grund af standard-scraperens UA.
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)})Cookies og sessioner
Bevar sessionscookies for at forblive logget ind på tværs af forespørgsler. Både requests Session og Playwright håndterer cookies automatisk.
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 og juridiske overvejelser
CAPTCHA'er er anti-bot-foranstaltninger. Det er teknisk muligt at løse dem programmatisk (2captcha, anti-captcha), men det rejser etiske og juridiske spørgsmål. Gennemgå altid webstedets robots.txt og servicevilkår, før du skraber det.
# 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 hitsPlaywright-skærmbilleder og PDF
Playwright kan tage skærmbilleder af eller udskrive sider til PDF — nyttigt til visuel test og arkivering.
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()Hurtigt tjek
Hvorfor mislykkes requests + BeautifulSoup på mange moderne websteder?
Opsummering
Brug Playwright eller Selenium til sider, der gengives med JavaScript. Kør i headless-tilstand på servere. Tilføj forsinkelser, og skift mellem User-Agent-strenge for at undgå blokeringer. Opfang netværksforespørgsler for at blokere trackere. Respektér altid robots.txt og servicevilkår.
Lær Python med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 76
- Lektioner
- 320
Ofte stillede spørgsmål
Er lektionen “Håndtering af JavaScript og anti-scraping-foranstaltninger” gratis?
Ja — hele teksten til “Håndtering af JavaScript og anti-scraping-foranstaltninger” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Python Academy-kurset, skal du opgradere til CoddyKit PRO. Python Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Håndtering af JavaScript og anti-scraping-foranstaltninger”?
Brug Playwright/Selenium til JS-renderet indhold og hastighedsbegrænsning. Du øver dig i Python Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Python Academy?
Der kræves ingen tidligere erfaring. Python Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 4 af 4.
Hvor lang tid tager lektionen “Håndtering af JavaScript og anti-scraping-foranstaltninger”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Python Academy-lektion?
Ja. Alle Python Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- HTTP-forespørgsler med requests og httpx
- Parsing af HTML med BeautifulSoup
- Oprettelse af en Scrapy-spider
- Håndtering af JavaScript og anti-scraping-foranstaltninger