Как выбрать вариант поиска с использованием селена? Сайт не позволяет мне просто нажать на кнопку "Отправить", требуется выбор
Я пытаюсь упростить для себя поиск временных квартир, но на веб-сайте с объявлениями об этих квартирах я должен выбрать предложение из их раскрывающегося списка, прежде чем я смогу нажать на кнопку «Отправить». Независимо от того, насколько полной может быть запись в поле поиска.
Конечная надежда здесь заключается в том, что я смогу перейти к результатам поиска и затем извлечь контактную информацию из каждого списка. Я смог извлечь нужные мне данные из листинга с помощью Beautiful soup и Requests, но мне пришлось вставить URL-адрес этого конкретного листинга в свой код. Я не зашел так далеко. Если у кого-то есть предложения о том, как, возможно, обойти целевую страницу, чтобы добраться до соответствующих списков, пожалуйста, дайте мне знать.
Я попытался просто вставить название города и штата в адресную строку, посмотрев, как оно написано после успешного поиска, но это не сработало.
Это сайт Mein Monteurzimmer .
Вот мой код:
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
Когда я проверяю окно поиска, я не могу найти ничего, связанного с предложениями, пока не введу текст. Тогда я не могу щелкнуть HTML-код, потому что это отклоняет предложения. Это довольно неприятно.
Вот скриншот:

Так что я слепо пытаюсь что-то выбрать.
Ошибка здесь:
AttributeError: объект FirefoxWebElement не имеет атрибута select_by_value
Я пробовал что-то с select, но это не работает с тем, как я это пробовал.
Я в тупике, и решения, которые я мог найти, были специфичны для других сайтов, таких как Google или Amazon, и я не мог понять этого.
Кто-нибудь знает, как я могу заставить эту работу?
Вот код для получения информации из листинга, который мне придется расширить, чтобы получить другие данные:
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
Ответы
Как вы можете видеть после ввода, появляется список создаваемых div. Теперь вам нужно получить действующий локатор для этих div. Чтобы получить указатель для этих созданных div, вам необходимо проверить элементы в режиме паузы отладки (F12 -> вкладка «Источник» -> F8).
Попробуйте использовать приведенный ниже код, чтобы выбрать первый совпадающий адрес при вводе.
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()
Примечание. Если имеется несколько совпадающих адресов, будет выбран первый.