Comment puis-je sélectionner une suggestion de recherche à l'aide de sélénium ? Le site m'empêche de simplement cliquer sur soumettre, nécessite une sélection
J'essaie de me faciliter un peu la recherche d'appartements temporaires, mais un site Web contenant des listes de ces appartements m'oblige à sélectionner une suggestion dans leur liste déroulante avant de pouvoir cliquer sur soumettre. Peu importe à quel point l'entrée dans le champ de recherche peut être complète.
L'espoir ultime ici est que je puisse accéder aux résultats de la recherche, puis extraire les informations de contact de chaque liste. J'ai pu extraire les données dont j'avais besoin d'une liste en utilisant Beautiful soup and Requests, mais j'ai dû coller l'URL de cette liste spécifique dans mon code. Je ne suis pas allé aussi loin. Si quelqu'un a une suggestion sur la façon de contourner la page de destination pour accéder aux listes pertinentes, veuillez me le faire savoir.
J'ai essayé de coller le nom de la ville et le nom de l'état dans la barre d'adresse en regardant comment il est écrit après une recherche réussie, mais cela n'a pas fonctionné.
Le site est Mein Monteurzimmer .
Voici mon code :
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
Lorsque j'inspecte le champ de recherche, je ne trouve rien en rapport avec les suggestions tant que je n'ai pas saisi de texte. Ensuite, je ne peux pas cliquer sur le code HTML car cela rejette les suggestions. C'est assez frustrant.
Voici une capture d'écran :

J'essaie donc aveuglément de sélectionner quelque chose.
L'erreur ici est :
AttributeError : l'objet 'FirefoxWebElement' n'a pas d'attribut 'select_by_value'
J'ai essayé quelque chose avec select, mais cela ne fonctionne pas avec la façon dont j'ai essayé ceci.
Je suis perplexe et les solutions que j'ai pu trouver étaient spécifiques à d'autres sites comme Google ou Amazon et je n'aurais pas de sens si cela.
Est-ce que quelqu'un sait comment je pourrais faire ce travail?
Voici le code permettant d'extraire des informations d'une liste, que je devrai développer pour obtenir les autres données :
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
Réponses
Comme vous pouvez le voir une fois que vous avez tapé, il y a une liste de création de divs. Vous devez maintenant obtenir un localisateur valide pour ces divs. Pour obtenir le localisateur de ces divs créés, vous devez inspecter les éléments en mode de pause de débogage ( F12--> Source Tab --> F8).
Essayez le code ci-dessous pour sélectionner la première adresse correspondante lors de la saisie.
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()
Remarque : S'il y a plus d'une adresse correspondante, la première sera sélectionnée.