Come posso selezionare un suggerimento di ricerca utilizzando il selenio? Il sito mi impedisce di fare semplicemente clic su Invia, richiede una selezione
Sto cercando di rendere la ricerca di appartamenti temporanei un po' più semplice per me stesso, ma un sito web con annunci per questi appartamenti mi richiede di selezionare un suggerimento dal loro elenco a discesa prima di poter fare clic su Invia. Non importa quanto completa possa essere la voce nella casella di ricerca.
L'ultima speranza qui è che posso anticipare i risultati della ricerca e quindi estrarre le informazioni di contatto da ogni elenco. Sono stato in grado di estrarre i dati di cui ho bisogno da un elenco utilizzando Beautiful soup e Requests, ma ho dovuto incollare l'URL per quell'elenco specifico nel mio codice. Non sono arrivato a tanto. Se qualcuno ha un suggerimento su come forse aggirare la pagina di destinazione per arrivare agli elenchi pertinenti, per favore fatemelo sapere.
Ho provato a unire il nome della città e il nome dello stato nella barra degli indirizzi osservando come è scritto dopo una ricerca riuscita, ma non ha funzionato.
Il sito è Mein Monteurzimmer .
Ecco il mio codice:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.select import Select
driver = webdriver.Firefox()
webpage = r"https://mein-monteurzimmer.de"
print('Prosim vnesi zeljeno mesto') #Please enter the town to search
searchterm = input()
driver.get(webpage)
sbox = driver.find_element_by_xpath("/html/body/main/cpagearea/section/div[2]/div/section[1]/div/div[1]/section/form/div/input")
sbox.send_keys(searchterm)
ddown = driver.find_element_by_xpath("/html/body/main/cpagearea/section/div[2]/div/section[1]/div/div[1]/section/form/div")
ddown.select_by_value(1)
webdriver.wait(2)
#select = driver.find_element_by_xpath("/html/body/main/cpagearea/section/div[2]/div/section[1]/div/div[1]/section/form/div")
submit = driver.find_element_by_xpath("/html/body/main/cpagearea/section/div[2]/div/section[1]/div/div[1]/section/form/button")
submit.click
Quando ispeziono la casella di ricerca non riesco a trovare nulla relativo ai suggerimenti finché non inserisco un testo. Quindi non posso fare clic sul codice HTML perché questo ignora i suggerimenti. È abbastanza frustrante.
Ecco uno screenshot:

Quindi sto cercando ciecamente di selezionare qualcosa.
L'errore qui è:
AttributeError: l'oggetto 'FirefoxWebElement' non ha l'attributo 'select_by_value'
Ho provato qualcosa con select, ma non funziona con il modo in cui ho provato questo.
Sono perplesso e le soluzioni che ho trovato erano specifiche per altri siti come Google o Amazon e non avrei avuto senso se fosse così.
Qualcuno sa come potrei farlo funzionare?
Ecco il codice per ottenere informazioni da un elenco, che dovrò espandere per ottenere gli altri dati:
import bs4, requests
def getMonteurAddress(MonteurUrl):
res = requests.get(MonteurUrl)
res.raise_for_status()
soup = bs4.BeautifulSoup(res.text, 'html.parser')
elems = soup.select('section.c:nth-child(4) > div:nth-child(2) > div:nth-child(2) > dl:nth-child(1) > dd:nth-child(2)')
return elems[0].text.strip()
address = getMonteurAddress('https://mein-monteurzimmer.de/105742/monteurzimmer/deggendorf-monteurzimmer-deggendorf-pensionfelix%40googlemailcom')
print('Naslov je ' + address) #print call to see if it gets the right data
Risposte
Come puoi vedere una volta digitato, c'è un elenco di creazione div. Ora devi ottenere un localizzatore valido per questi div. Per ottenere il localizzatore per questi div creati è necessario ispezionare gli elementi in modalità di pausa di debug (F12--> Scheda Sorgente --> F8).
Prova sotto il codice per selezionare il primo indirizzo corrispondente durante la digitazione.
sbox = driver.find_element_by_xpath("//input[@placeholder='Adresse, PLZ oder Ort eingeben']")
sbox.send_keys(searchterm)
addessXpath = "//div[contains(text(),'"+searchterm+"')]"
driver.find_element_by_xpath(addessXpath).click()
Nota: se sono presenti più indirizzi corrispondenti, verrà selezionato il primo.