Selenium и Python 3: выбор поля поиска на otto.de

Я новичок в Python 3, а также в веб-парсинге, и сейчас я немного застрял. Я хочу:
1. Выберите поле поиска на otto.de. 2. Введите номер продукта, который я хочу найти.
3. Нажмите "Ввод" или нажмите кнопку поиска. 4. Загрузите следующую страницу.

Поле поиска на otto.de имеет следующий исходный код:

<form class = "p_form js_searchForm focus" action = "/suche" data-article-number-search = "/p/search/" autocomplete = "off" autocorrect = "off" spellcheck = "false" role = "search">
            <input placeholder = "Suchbegriff / Artikelnr. eingeben" data-error = "Bitte mind. ein Zeichen eingeben" class = "p_form__input js_searchField sanSearchInput" type = "text" autocomplete = "off" autocorrect = "off" maxlength = "50" disabled>
            <button class = "sanSearchDelBtn p_symbolBtn100--4th" type = "reset"><i>X</i></button>
            <button class = "js_submitButton sanSearchButton" type = "submit" title = "Suche" disabled ><span>&raquo;</span></button>
</form>

Что я пытался сделать:

browser = webdriver.Firefox()
browser.get('http://www.otto.de')
elem = browser.find_element_by_xpath("//form[input/@class='p_form__input   js_searchField sanSearchInput']")
elem.send_keys('538707' + Keys.RETURN)
with open("Productpage.txt", "w") as outfile:
    outfile.write(browser.page_source)
browser.quit()

Это дает мне следующее сообщение об ошибке:

selenium.common.exceptions.InvalidElementStateException: Message: Unable    to clear element that cannot be edited: <form class=
"p_form js_searchForm focus"> 

Я пробовал много разных команд, но не могу попасть на нужную страницу. Есть у кого-нибудь идеи как решить эту проблему?

Вы пробовали нажимать на нее перед отправкой ключей?

return 02.06.2018 12:11

Похоже, ваш xpath выбирает элемент <form>. Что вы действительно хотите выбрать (для последующей отправки ключей), так это элемент <input> внутри формы.

the-bass 02.06.2018 12:12
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
166
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вот рабочий код:

from selenium import webdriver
from selenium.webdriver.support import ui
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
import time


browser = webdriver.Firefox()
browser.get("http://www.otto.de")

ui.WebDriverWait(browser, 10).until(EC.visibility_of_element_located((By.CSS_SELECTOR, ".p_form__input.js_searchField.sanSearchInput"))).send_keys("538707")

ui.WebDriverWait(browser, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, ".js_submitButton.sanSearchButton"))).click()

with open("Productpage.txt", "w", encoding = "utf-8") as outfile:

    outfile.write(browser.page_source)

time.sleep(5)

browser.quit()

Надеюсь, это поможет вам!

Большое спасибо, это очень помогает !!

Red 02.06.2018 13:28

Ок, отлично! Поставьте, пожалуйста, галочку рядом с моим ответом.

Ratmir Asanov 02.06.2018 13:35

Просто чтобы лучше понять ваш код: почему вы используете WebDriverWait и спите? Требуется ли время ожидания, чтобы найти элемент и сохранить содержимое страницы?

Red 02.06.2018 13:38

1) WebDriverWait используется для локации (поиска) элемента. Это явное ожидание. 2) time.sleep(5) можно удалить. Просто чтобы увидеть результат в конце.

Ratmir Asanov 02.06.2018 13:40

Другие вопросы по теме