Selen brukes til å automatisere kjedelige oppgaver; Den automatiserer nettlesere. Fra å navigere på nettet til automatisk å logge på kontoer til å lage roboter for forskjellige oppgaver kan oppnås ved bruk av selen.
Først av alt, la oss installere avhengighetene:
Pip installer selen
Pip Installer WebDriver-Manager
Navigere i nettet
Vi importerer avhengighetene:
Fra Selenium Import WebDriver
Fra WebDriver_Manager.Chrome Import ChromedRivermanager
Vi initialiserer deretter webdriveren:
driver = webdriver.Chrome (ChromedRIVERManager ().installere())
La oss i første omgang prøve å navigere i en webside ved hjelp av få () metode. De få () metode vil åpne opp nettsiden eller nettadressen som ble lagt inn; Vær oppmerksom på at hele lenken må være gitt for at dette skal fungere.
sjåfør.få ("https: // duckduckgo.com/")
Anta at du ønsket å maksimere vinduet ved hjelp av maksimere_window () metode og ikke ha python gjennom resten av koden; Du vil deretter bruke implisitt_wait () metode for å pause.
sjåfør.maksimere_window ()
sjåfør.implisitt_wait (4)
Hvis du vil ha informasjon på nettstedet, kan du bruke tittelmetoden for å få navnet eller tittelen på nettstedet, Current_url -metoden for å få URL -en, og Page_source for å få HTML -koden på siden.
trykk (driver.tittel)
trykk (driver.current_url)
trykk (driver.side_source)
For å legge inn et stykke tekst i søkefeltet, må vi først prøve å identifisere søkefeltet ved hjelp av "undersøke”Knapp (høyreklikk -> Inspiser).
For Duckduckgo.com, det er en ID tilgjengelig, men du kan også få andre attributter. Den neste metoden vi bruker er find_element_by_id () -metoden. Denne metodenes formål er å velge elementet av bekymring.
search_bar = driver.find_element_by_id ("search_form_input_homepage")
Du kan imidlertid erstatte dette med noen av de andre attributtene. For eksempel, hvis du har navnet tilgjengelig, så bruk find_elements_by_name () metode. Vi trengte ikke å bruke IDen; Vi kunne ha brukt noe annet hadde vi ønsket oss. For eksempel kunne vi ha brukt navnet som følger:
search_bar = driver.find_element_by_name ("q")
Siden vi har funnet søkefeltet, kan vi nå legge inn et tekststykke ved hjelp av send_keys () metode.
søkelinje.Send_Keys ("SeleniumHQ")
Teoretisk sett er det vi ville gjort å klikke på neste knapp. Så hva gjør vi? Ja, du har gjettet det! Vi metoder elementene og finner ID eller en annen attributt til neste knapp. Deretter bruker vi klikk () -metoden for å klikke på knappen vi har valgt ved hjelp av et attributt (for eksempel ID).
knapp = driver.find_element_by_id ("search_button_homepage")
knapp.Klikk ()
På dette tidspunktet får du en liste over nettsteder; Det er omtrent som å skrive selenhq i søkefeltet til Duckduckgo.com nettsted og trykke på neste knapp. La oss nå prøve å klikke på første side vi får. Her skal jeg bruke XPath, men du kan bruke noen av attributtene. Vær oppmerksom på at når du bruker XPath, er anførselstegnene inni enkelt og utenfor er doble (“//*[@id = 'R1-0']/Div/H2/A [1]”).
side = driver.find_element_by_xpath ("//*[@id = 'r1-0']/div/h2/a [1]")
side.Klikk ()
Logg på en e -postkonto
La oss nå anta at vi vil logge på en e -postkonto. Som alltid begynte vi å importere de nødvendige modulene og initialisere dem som vi gjorde for å navigere i en webside. Her importerer vi tid også.
Fra Selenium Import WebDriver
Fra WebDriver_Manager.Chrome Import ChromedRivermanager
Importer tid
driver = webdriver.Chrome (ChromedRIVERManager ().installere())
sjåfør.få ("https: // www.Gmail.com/")
sjåfør.maksimere_window ()
sjåfør.implisitt_wait (4)
Bruker = driver.find_element_by_xpath ("//*[@id = 'identifierid']")
bruker.Send_Keys ("[email protected] ")
Neste = Driver.find_element_by_xpath ("//*[@id = 'Identifiernext']/div/knapp/div [2]")
NESTE.Klikk ()
Deretter skal vi bruke tid.sove() Metode for å forhindre synkroniseringsfeil (til tider tar det lengre tid å laste en side, og mens den lastes, blir resten av skriptet utført og en feil rapportert). I et forsøk på å forhindre synkroniseringsfeil, vil vi gi det tid til å laste inn alt.
tid.søvn (3)
Passord = driver.find_element_by_xpath ("//*[@id = 'passord']/div [1]/div/div [1]/input")
passord.send_keys ("Password1.")
Neste2 = driver.find_element_by_xpath ("//*[@id = 'PasswordNext']/Div/Button/Div [2]")
Neste2.Klikk ()
Sende e -post ved hjelp av Selenium
For å sende e -post, trenger vi to deler: Hvordan logge inn i Gmail fra forrige seksjon og hvordan du sender e -post fra denne delen. Å sende en e -post er like enkelt som å navigere på nettet eller til og med logge inn i Gmail. Nok en gang velger vi find_element_by_xpath () -metoden eller en som er lik, slik som find_element_by_id () eller enda en for å finne hver komponent i meldingen som skal sendes - komponeringsknappen, destinasjonsinngangslinjen, emnet inngangslinjen, kroppen , og send -knappen. Vi må finne dem, befolke dem med tekst når det er nødvendig og klikk på knapper. Enkelt nok. Så la oss prøve det:
La oss først finne komponeringsknappen ved hjelp av XPath, og klikk deretter på den:
tid.søvn (1)
kompose_button = driver.find_element_by_xpath ("//*[@id = ': 2p']/div/div")
kompose_button.Klikk ()
Deretter, la oss legge til en destinasjonsadresse i destinasjonsadresseinngangslinjen:
tid.søvn (2)
to_input_bar = driver.find_element_by_id (': 8c')
to_input_bar.Send_Keys ("[email protected] ")
Nå legger vi til et emne, et organ og klikker på Send -knappen:
Emne = Driver.find_element_by_id (': 7u')
Emne.send_keys ("Test e -post")
kropp = driver.find_element_by_xpath ("//*[@id = ': 8z']")
kropp.Send_Keys ("Dette er en automatisert melding sendt ved hjelp av Selenium.")
Send_Button = Driver.find_element_by_xpath ("//*[@id = ': 7k']")
Send_Button.Klikk ()
OK, så det er nå for enkelt å lage et enkelt program å logge på og sende e -post? Vi trenger ikke å stoppe der; Vi kan lage alle slags roboter.
Mushandlinger
Den neste tingen å lære er å takle mushandlinger - fra å sveve til å dra og slippe filer.
Vi må først spesifisere fanene; I dette tilfellet vil jeg spesifisere tre faner - Fanen Home, Electronics -fanen og kategorien mobiltelefon (mobiltelefon er nestet innen elektronikk). Ok, så for dette eksemplet valgte jeg eBay.ca. På eBay.CA, det er mange faner - en for hjemmet og en for elektronikk. Vi starter vanligvis på fanen Hjemme. Her, la oss si at jeg vil navigere. Vi kan bruke mushandlinger for å utføre følgende.
Vi begynner med å importere nødvendig og åpne eBay.ca.
Fra Selenium Import WebDriver
fra Selenium.WebDriver importerer actionchains
Fra WebDriver_Manager.Chrome Import ChromedRivermanager
Importer tid
driver = webdriver.Chrome (ChromedRIVERManager ().installere())
sjåfør.få ("https: // www.eBay.Ca/")
Deretter må vi legge til elementene vi er opptatt av. I dette tilfellet har jeg de tre røde boksene i forrige bilde.
Hjem = sjåfør.find_element_by_xpath ("//*[@id = 'maincontent']/div [1]/ul/li [1]/span")
Elektronikk = driver.find_element_by_xpath ("//*[@id = 'maincontent']/div [1]/ul/li [5]/a")
mobiltelefon = driver.find_element_by_xpath ("//*[@id = 'maincontent']/div [1]/ul/li [5]/div [2]/div [1]/nav [1]/ul/li [1]/a a ")
Vi initialiserer deretter Handlingskains og bruk MOVE_TO_ELEMENT () Metode for å flytte hjemmefra til elektronikk og mobiltelefoner. En gang på kategorien mobiltelefon og tilbehør, klikker vi på den. For at alt dette skal fungere, må vi legge til Perform () -metoden på slutten, eller ingenting vil skje.
Handlinger = ActionChains (sjåfør)
next_step = handlinger.MOVE_TO_ELEMENT (HJEM).MOVE_TO_ELEMENT (elektronikk)
neste steg.MOVE_TO_ELEMENT (mobiltelefon).Klikk ()
neste steg.utføre()
Du kan imidlertid utføre forskjellige handlinger med musen - fra høyreklikk til dra og dråper. La oss få et eksempel der du kan høyreklikke. For å høyreklikke trenger du Context_Click () -metoden; passere innenfor det du ønsker å klikke. I dette tilfellet ønsker vi først å høyreklikke på knappen, så vi sier driveren.Context_click (knapp) - høyreklikk på knappen. Når høyreklikket viser oss en valgmeny med alternativer, ber vi den klikke på et av alternativene som vises - klikk (kopi), som vil klikke på kategorien Copy.
Fra Selenium Import WebDriver
fra Selenium.WebDriver importerer actionchains
Fra WebDriver_Manager.Chrome Import ChromedRivermanager
driver = webdriver.Chrome (ChromedRIVERManager ().installere())
sjåfør.få ("https: // swisnl.github.io/jQuery-contextmenu/demo/meny-title.html ")
knapp = driver.find_element_by_xpath ("/html/body/div/seksjon/div/div/div/p/span [1]")
Kopi = driver.find_element_by_xpath ("/html/body/ul [1]/li [3]")
Handlinger = ActionChains (sjåfør)
Handlinger.Context_click (knapp).Klikk (Kopier)
Handlinger.utføre()
Du kan gjøre så mange ting med Selenium, men vi vil også se på drag og slipp. Det er to måter å dra og slippe et element inn i måldestinasjonen. Den ene bruker Drag_and_Drop () -metoden, og den andre bruker en mer komplisert teknikk:
Fra Selenium Import WebDriver
fra Selenium.WebDriver importerer actionchains
Fra WebDriver_Manager.Chrome Import ChromedRivermanager
Importer tid
driver = webdriver.Chrome (ChromedRIVERManager ().installere())
sjåfør.få ("http: // www.dhtmlgoodies.com/manus/drag-drop-noder/drag-drop-node-demo3.html ")
sjåfør.implisitt_wait (1)
sjåfør.maksimere_window ()
# Velg kildebilde på siden for å dra
kilde = driver.find_element_by_id ("node2")
# Velg målet der du vil at det falt
mål = driver.find_element_by_xpath ("//*[@id = 'box1']")
tid.søvn (5)
# Initialiser handlingskains
action_chains = actionchains (driver)
# Flytt kilden til målet
Handling = Action_chains.click_and_hold (kilde) \
.MOVE_TO_ELEMENT (Target) \
.slipp (mål) \
.klikk (mål) \
.utføre()
Selen er et veldig kraftig verktøy for å gjøre veldig mange ting. I denne opplæringen dekket vi noen av tingene som selen kan gjøre; Når du først er kjent med det, kan du opprette alle slags roboter for å automatisere nettleseren.
Glad koding!