Как выбрать вариант поиска с использованием селена? Сайт не позволяет мне просто нажать на кнопку "Отправить", требуется выбор

Aug 18 2020

Я пытаюсь упростить для себя поиск временных квартир, но на веб-сайте с объявлениями об этих квартирах я должен выбрать предложение из их раскрывающегося списка, прежде чем я смогу нажать на кнопку «Отправить». Независимо от того, насколько полной может быть запись в поле поиска.

Конечная надежда здесь заключается в том, что я смогу перейти к результатам поиска и затем извлечь контактную информацию из каждого списка. Я смог извлечь нужные мне данные из листинга с помощью 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

Ответы

1 rahulrai Aug 18 2020 at 20:20

Как вы можете видеть после ввода, появляется список создаваемых 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()

Примечание. Если имеется несколько совпадающих адресов, будет выбран первый.