Селен не нажимает на поле поиска

#python #selenium #selenium-webdriver #xpath

#питон #селен #селен-веб-драйвер #xpath

Вопрос:

Я пытаюсь использовать селен для выполнения следующих действий:

  1. Откройте веб-сайт
  2. Нажмите на поле поиска
  3. Введите «Сиэтл» в поле поиска
  4. Выберите первый результат из предложенных результатов
  5. Нажмите «Ввод»
  6. Нажмите на новое поле поиска
  7. Введите «Чикаго» в новом поле поиска
  8. Выберите первый результат из предложенных результатов

Мне удалось заставить его работать до шага 5, но я не могу найти способ выполнять те же задачи с помощью нового поля поиска на шаге 6.

Вот мой код:

 from selenium import webdriver from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC  driver = webdriver.Chrome() wait = WebDriverWait(driver, 20)  url = 'https://wego.here.com/' driver.get(url)  wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "input.input_search"))).click() wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "input.input_search"))).send_keys('Seattle') wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "input.input_search"))).send_keys(Keys.ENTER)  wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "button.btn"))).send_keys(Keys.ENTER)  wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "input.ng_pristine"))).click() wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "input.ng_pristine"))).send_keys('Chicago') wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "input.ng_pristine"))).send_keys(Keys.ENTER)  

Вот как выглядит исходная страница нового окна поиска:

1

Это конечный результат, который я хочу видеть:

2

Ответ №1:

В этом конкретном сценарии, чтобы выполнить новый поиск, вы должны сначала очистить предыдущее состояние поиска.
Это должно сработать:

 from selenium import webdriver from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC  driver = webdriver.Chrome() wait = WebDriverWait(driver, 20)  url = 'https://wego.here.com/' driver.get(url)  wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "input.input_search"))).click() wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "input.input_search"))).send_keys('Seattle') wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "input.input_search"))).send_keys(Keys.ENTER)  wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "button.btn"))).send_keys(Keys.ENTER)  # clear the previous search results wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, ".btn_close"))).click()  #perform a new search wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "input.input_search"))).click() wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "input.input_search"))).send_keys('Chicago') wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "input.input_search"))).send_keys(Keys.ENTER)  

UPD
На отредактированный вопрос ответ таков:
Вы используете неправильный локатор.
Это должно сработать:

 from selenium import webdriver from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC  driver = webdriver.Chrome() wait = WebDriverWait(driver, 20)  url = 'https://wego.here.com/' driver.get(url)  search_input = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "input.input_search"))) search_input.click() search_input.send_keys('Seattle') search_input.send_keys(Keys.ENTER)  wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "button.btn"))).send_keys(Keys.ENTER)  internal_search_input = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "input#itinerary_item_input_0"))) internal_search_input.click() internal_search_input.send_keys('Chicago') internal_search_input.send_keys(Keys.ENTER)  

Комментарии:

1. На самом деле ваш код выполняет новый поиск вместо добавления информации об отправлении в новое поле поиска. Я отредактировал новое изображение для вашей справки. Спасибо за вашу помощь!

2. Ладно, я понял. Похоже, ты недостаточно ясно объяснился, или, может быть, я тебя неправильно понял. В любом случае, пожалуйста, попробуйте обновленный ответ.

3. а ну понятно. Вот как вы получаете доступ к идентификационному тегу. Большое спасибо!