Webbskrapning och botutveckling · Lektion

Automatisera webbläsarinteraktioner

Simulera användaråtgärder programmässigt, till exempel klick, rullning, formulärskick och väntan på att element ska läsas in.

Lektion 2 av 412 steg

Automatisera webbläsarinteraktioner är en gratis lektion i Webbskrapning och botutveckling på CoddyKit. Detta är lektion 2 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Webbskrapning och botutveckling, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Webbskrapning och botutveckling innehåller totalt 4 lektioner.

Automatisera åtgärder i webbläsaren

I den föregående lektionen introducerade vi Selenium för att hantera dynamiskt webbinnehåll. Nu ska vi lära oss hur vi får våra botar att interagera med webbsidor!

Vi simulerar verkliga användaråtgärder som att klicka på knappar, skriva i formulär och rulla, vilket gör våra skrapverktyg mycket kraftfullare.

Hitta elementen först

Innan du kan interagera med ett element, till exempel en knapp eller ett textfält, måste du hitta det på sidan. Selenium erbjuder flera sätt att göra detta.

Du använder metoder som find_element(By.ID, "some_id") eller find_element(By.CLASS_NAME, "some_class") för att hitta det du söker.

  • By.ID: Unikt ID-attribut.
  • By.NAME: Namnattribut.
  • By.CLASS_NAME: CSS-klass.
  • By.XPATH: Kraftfulla sökvägsuttryck.
  • By.CSS_SELECTOR: CSS-selektorsyntax.

Klicka

Den vanligaste interaktionen är att klicka. Oavsett om det gäller en knapp, en länk eller en kryssruta utför metoden .click() uppgiften.

När du har hittat ett element anropar du bara .click() på det. Det simulerar ett musklick från användaren.

Prova att klicka på en påhittad knapp:

from selenium import webdriver
from selenium.webdriver.common.by import By
import time

def main():
    driver = webdriver.Chrome() # Or Firefox, Edge, etc.
    driver.get("https://www.example.com")
    try:
        # Imagine a button with ID 'myButton'.
        # On example.com, we can click the 'More information...' link.
        more_info_link = driver.find_element(By.LINK_TEXT, "More information...")
        more_info_link.click()
        print("Clicked 'More information...' link.")
        time.sleep(2) # To see the new page
    finally:
        driver.quit()

if __name__ == "__main__":
    main()

Skriva in text

För att fylla i formulär eller sökfält använder du metoden .send_keys(). Den simulerar att text skrivs in i ett inmatningsfält.

Du kan även skicka specialtangenter som Keys.ENTER, Keys.TAB och så vidare från selenium.webdriver.common.keys.

Nu skriver vi i ett sökfält:

from selenium import webdriver
from selenium.webdriver.common.by import By
import time

def main():
    driver = webdriver.Chrome()
    driver.get("https://www.google.com") # Using google for a search box
    try:
        search_box = driver.find_element(By.NAME, "q")
        search_box.send_keys("CoddyKit Selenium")
        time.sleep(2) # See the typed text
    finally:
        driver.quit()

if __name__ == "__main__":
    main()

Skicka formulärdata

När du har fyllt i ett formulär behöver du ofta skicka det. Det kan du göra på ett par olika sätt:

  • Klicka på skicka-knappen: submit_button.click()
  • Anropa .submit() på valfritt inmatningselement i formuläret: input_field.submit()

Metoden .submit() är praktisk eftersom du inte behöver hitta den specifika skicka-knappen.

Exempel på hur du skickar ett formulär (efter att ha skrivit in text):

from selenium import webdriver
from selenium.webdriver.common.by import By
import time

def main():
    driver = webdriver.Chrome()
    driver.get("https://www.google.com")
    try:
        search_box = driver.find_element(By.NAME, "q")
        search_box.send_keys("Selenium forms")
        search_box.submit() # Submits the form containing this element
        time.sleep(3) # Observe search results
    finally:
        driver.quit()

if __name__ == "__main__":
    main()

Varför vi behöver vänta

Webbsidor läser ofta in innehåll dynamiskt med JavaScript. Det innebär att element kanske inte är tillgängliga direkt när Selenium försöker hitta dem.

Om skriptet försöker interagera med ett element som ännu inte har lästs in uppstår ett fel. Det är här "väntan" kommer in!

Väntan instruerar Selenium att pausa körningen tills ett visst villkor är uppfyllt eller en tidsgräns nås.

Enkla implicita väntetider

En implicit väntetid instruerar WebDriver att söka efter element i DOM (Document Object Model) under en viss tid.

Om elementet inte är tillgängligt direkt väntar drivrutinen den angivna tiden innan den utlöser ett NoSuchElementException.

Detta är en global inställning för hela drivrutinssessionen:

from selenium import webdriver
import time

def main():
    driver = webdriver.Chrome()
    # Set implicit wait for 10 seconds
    driver.implicitly_wait(10)
    try:
        driver.get("https://www.example.com")
        print("Implicit wait set for 10 seconds.")
        # Any subsequent find_element calls will wait up to 10s
        # if the element isn't immediately found.
        time.sleep(2) # Just to show the wait is active
    finally:
        driver.quit()

if __name__ == "__main__":
    main()

Exakta explicita väntetider

Explicita väntetider är kraftfullare och mer flexibla. De låter dig ange ett specifikt villkor att vänta på i stället för en fast tid.

Du använder WebDriverWait tillsammans med expected_conditions (som ofta importeras som EC) för att ange vad du väntar på. Detta passar bäst för specifika element och dynamiskt innehåll.

Så här väntar du på att ett (påhittat) element med ID:t 'dynamicDiv' ska bli synligt:

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
import time

def main():
    driver = webdriver.Chrome()
    driver.get("https://www.example.com")
    try:
        print("Waiting for an element to be visible...")
        # WebDriverWait waits up to 10 seconds
        # for an element with ID 'dynamicDiv' to become visible.
        # This element does not exist on example.com, so it will timeout.
        # In a real app, replace with a real ID.
        element = WebDriverWait(driver, 10).until(
            EC.visibility_of_element_located((By.ID, "dynamicDiv"))
        )
        print(f"Element found: {element.text}")
    except Exception as e:
        print(f"Element not found or timed out: {e}")
    finally:
        driver.quit()

if __name__ == "__main__":
    main()

Rulla för att läsa mer innehåll

Vissa webbplatser läser in innehåll medan du rullar nedåt (oändlig rullning). För att komma åt detta innehåll måste boten rulla på sidan.

Du kan använda JavaScript-körning för att rulla till en specifik position eller längst ned på sidan.

Så här rullar du längst ned:

from selenium import webdriver
import time

def main():
    driver = webdriver.Chrome()
    driver.get("https://www.wikipedia.org") # A page that can be scrolled
    try:
        # Scroll down to the bottom of the page
        driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
        print("Scrolled to the bottom of the page.")
        time.sleep(2) # Observe the scroll
        # You can also scroll incrementally:
        # driver.execute_script("window.scrollBy(0, 500);")
    finally:
        driver.quit()

if __name__ == "__main__":
    main()

Interagera med rullgardinsmenyer

HTML-element av typen <select> (rullgardinsmenyer) kräver ett särskilt tillvägagångssätt i Selenium med klassen Select.

Hitta först elementet <select>, skapa sedan ett Select-objekt och använd slutligen metoder som select_by_visible_text(), select_by_value() eller select_by_index().

Exempel:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import Select
import time

def main():
    driver = webdriver.Chrome()
    # For this example, we'll use a test page with a dropdown.
    # In a real scenario, you'd navigate to a specific URL.
    driver.get("https://www.selenium.dev/selenium/web/formPage.html")
    try:
        # Find the select element by its ID
        select_element = driver.find_element(By.ID, "selectMenu")
        select = Select(select_element)
        
        # Select an option by its visible text
        select.select_by_visible_text("Example select text")
        print("Selected 'Example select text' by visible text.")
        time.sleep(2)
        
        # Select an option by its value attribute
        select.select_by_value("2")
        print("Selected option with value '2'.")
        time.sleep(2)

    finally:
        driver.quit()

if __name__ == "__main__":
    main()

Testa dina kunskaper

Du har lärt dig att automatisera olika interaktioner med webbläsaren och om väntetidernas viktiga roll.

Vilka av följande är giltiga sätt att interagera med webbelement med Selenium i Python?

Sammanfattning: Automatisera interaktioner

Bra jobbat! Nu vet du hur du får dina Selenium-botar att utföra vanliga användaråtgärder:

  • Hitta element: Använd olika By-strategier.
  • Interagera: .click() för knappar och länkar, .send_keys() för textinmatning och .submit() för formulär.
  • Vänta: Viktigt för dynamiskt innehåll. Använd implicitly_wait() eller den mer precisa WebDriverWait tillsammans med expected_conditions.
  • Avancerat: Rulla med JavaScript och hantera rullgardinsmenyer med klassen Select.

Dessa färdigheter är grundläggande när du bygger robusta skript för webbläsarautomatisering!

Gratis att börja

Lär dig Python med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
12
Lektioner
48

Vanliga frågor

Är lektionen ”Automatisera webbläsarinteraktioner” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Webbskrapning och botutveckling, inklusive ”Automatisera webbläsarinteraktioner”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Webbskrapning och botutveckling innehåller totalt 4 lektioner.

Vad lär jag mig i ”Automatisera webbläsarinteraktioner”?

Simulera användaråtgärder programmässigt, till exempel klick, rullning, formulärskick och väntan på att element ska läsas in. Ni övar på Webbskrapning och botutveckling med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Webbskrapning och botutveckling?

Du behöver inga förkunskaper. Utbildningen i Webbskrapning och botutveckling på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 4.

Hur lång tid tar lektionen ”Automatisera webbläsarinteraktioner”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Webbskrapning och botutveckling-lektionen?

Ja. Varje Webbskrapning och botutveckling-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Introduktion till Selenium
  2. Automatisera webbläsarinteraktioner
  3. Extrahera data från JavaScript
  4. Väntstrategier för dynamiska sidor
← Tillbaka till Webbskrapning och botutveckling