Verkkosivujen kaavinta ja botit · Oppitunti

Selainvuorovaikutusten automatisointi

Simuloikaa ohjelmallisesti käyttäjän toimintoja, kuten napsautuksia, vierityksiä ja lomakkeiden lähettämistä, sekä odottakaa elementtien latautumista.

Oppitunti 2/412 vaihetta

Selainvuorovaikutusten automatisointi on ilmainen Verkkosivujen kaavinta ja botit-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Verkkosivujen kaavinta ja botit-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Verkkosivujen kaavinta ja botit-kurssilla on yhteensä 4 oppituntia.

Selain toimintojen automatisointi

Edellisessä oppitunnissa tutustuitte Seleniumiin dynaamisen verkkosisällön käsittelyä varten. Nyt opitte, miten botit voivat olla vuorovaikutuksessa verkkosivujen kanssa!

Jäljittelemme todellisia käyttäjän toimintoja, kuten painikkeiden napsauttamista, lomakkeiden täyttämistä ja vierittämistä, jolloin kaavintatyökaluistamme tulee paljon tehokkaampia.

Etsi elementit ensin

Ennen kuin voitte käyttää elementtiä, kuten painiketta tai tekstikenttää, se on löydettävä sivulta. Selenium tarjoaa tähän useita tapoja.

Käytätte menetelmiä, kuten find_element(By.ID, "some_id") tai find_element(By.CLASS_NAME, "some_class"), kohde-elementin paikantamiseen.

  • By.ID: yksilöllinen ID-määrite
  • By.NAME: name-määrite
  • By.CLASS_NAME: CSS-luokka
  • By.XPATH: tehokkaat polkulausekkeet
  • By.CSS_SELECTOR: CSS-valitsinsyntaksi

Napsauttaminen

Yleisin toiminto on napsauttaminen. Olipa kyseessä painike, linkki tai valintaruutu, .click()-menetelmä hoitaa tehtävän.

Kun olette löytäneet elementin, kutsukaa siinä yksinkertaisesti menetelmää .click(). Tämä jäljittelee käyttäjän hiiren napsautusta.

Kokeilkaa napsauttaa kuvitteellista painiketta:

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()

Tekstin syöttäminen

Lomakkeiden tai hakukenttien täyttämiseen käytätte .send_keys()-menetelmää. Se jäljittelee tekstin kirjoittamista syöttökenttään.

Voitte lähettää myös erikoisnäppäimiä, kuten Keys.ENTER ja Keys.TAB, moduulista selenium.webdriver.common.keys.

Kirjoitetaan hakukenttään:

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()

Lomaketietojen lähettäminen

Lomakkeen täyttämisen jälkeen se on usein lähetettävä. Voitte tehdä tämän kahdella tavalla:

  • Napsauttakaa lähetyspainiketta: submit_button.click()
  • Kutsukaa lomakkeen minkä tahansa syöttöelementin .submit()-menetelmää: input_field.submit()

.submit()-menetelmä on kätevä, koska tiettyä lähetyspainiketta ei tarvitse etsiä.

Esimerkki lomakkeen lähettämisestä kirjoittamisen jälkeen:

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()

Miksi odottaminen on tarpeen

Verkkosivut lataavat sisältöä usein dynaamisesti JavaScriptin avulla. Siksi elementit eivät välttämättä ole heti käytettävissä, kun Selenium yrittää löytää ne.

Jos komentosarjanne yrittää käyttää elementtiä, jota ei ole vielä ladattu, se aiheuttaa virheen. Tässä tilanteessa tarvitaan odotuksia!

Odotukset käskevät Seleniumia keskeyttämään suorituksen, kunnes tietty ehto täyttyy tai aikakatkaisu saavutetaan.

Yksinkertaiset implisiittiset odotukset

Implisiittinen odotus käskee WebDriveria tarkistamaan DOM-rakennetta (Document Object Model) tietyn ajan, kun se yrittää löytää elementtiä.

Jos elementti ei ole heti käytettävissä, ajuri odottaa määritetyn ajan ennen NoSuchElementException-poikkeuksen aiheuttamista.

Tämä on koko ajuri-istuntoa koskeva yleisasetus:

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()

Tarkat eksplisiittiset odotukset

Eksplisiittiset odotukset ovat tehokkaampia ja joustavampia. Niiden avulla voitte määrittää tietyn ehdon, jota odotetaan, kiinteän ajan sijaan.

Käytätte WebDriverWait-luokkaa yhdessä expected_conditions-moduulin kanssa (joka tuodaan usein nimellä EC) määrittääksenne, mitä odotetaan. Tämä sopii parhaiten tiettyihin elementteihin ja dynaamiseen sisältöön.

Näin odotatte kuvitteellisen tunnisteella 'dynamicDiv' varustetun elementin muuttumista näkyväksi:

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()

Vierittäminen lisäsisällön löytämiseksi

Jotkin verkkosivustot lataavat sisältöä vieritettäessä alaspäin (loputon vieritys). Jotta bottinne voi käyttää tätä sisältöä, sen on vieritettävä sivua.

Voitte suorittaa JavaScript-koodia vierittääksenne tiettyyn kohtaan tai sivun alareunaan.

Vierittäminen aivan alareunaan:

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()

Valintavalikoiden käsittely

HTML-elementit <select> (pudotusvalikot) edellyttävät Seleniumissa erityistä lähestymistapaa, jossa käytetään Select-luokkaa.

Etsikää ensin <select>-elementti, luokaa sitten Select-olio ja käyttäkää lopuksi menetelmiä, kuten select_by_visible_text(), select_by_value() tai select_by_index().

Esimerkki:

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()

Testaa tietosi

Olette oppineet automatisoimaan erilaisia selaimen toimintoja ja ymmärtäneet odotusten keskeisen merkityksen.

Mitkä seuraavista ovat kelvollisia tapoja käsitellä verkkosivun elementtejä Seleniummilla Pythonissa?

Kertaus: toimintojen automatisointi

Hienoa! Nyt osaatte toteuttaa Selenium-boteilla tavallisia käyttäjän toimintoja:

  • Elementtien etsiminen: erilaisten By-strategioiden avulla.
  • Vuorovaikutus: .click() painikkeille ja linkeille, .send_keys() tekstin syöttämiseen sekä .submit() lomakkeille.
  • Odotukset: välttämättömiä dynaamiselle sisällölle; käytössä ovat implicitly_wait() tai tarkempi WebDriverWait yhdessä expected_conditions-moduulin kanssa.
  • Edistyneet toiminnot: vierittäminen JavaScriptillä ja pudotusvalikoiden käsittely Select-luokan avulla.

Nämä taidot ovat vankkojen verkkosivujen automatisointiin tarkoitettujen komentosarjojen perusta!

Aloita maksutta

Opi Python tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
12
Oppitunnit
48

Usein kysytyt kysymykset

Onko oppitunti ”Selainvuorovaikutusten automatisointi” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Verkkosivujen kaavinta ja botit-oppimispolun 3 oppituntia, myös oppitunnin “Selainvuorovaikutusten automatisointi”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Verkkosivujen kaavinta ja botit-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Selainvuorovaikutusten automatisointi”?

Simuloikaa ohjelmallisesti käyttäjän toimintoja, kuten napsautuksia, vierityksiä ja lomakkeiden lähettämistä, sekä odottakaa elementtien latautumista. Harjoittelet Verkkosivujen kaavinta ja botit-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Verkkosivujen kaavinta ja botit-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Verkkosivujen kaavinta ja botit-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.

Kuinka kauan ”Selainvuorovaikutusten automatisointi”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Verkkosivujen kaavinta ja botit-oppitunnilla?

Kyllä. Jokainen Verkkosivujen kaavinta ja botit-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Johdatus Seleniumiin
  2. Selainvuorovaikutusten automatisointi
  3. Tietojen poiminta JavaScriptistä
  4. Dynaamisten sivujen odotusstrategiat
← Takaisin: Verkkosivujen kaavinta ja botit