#python #selenium #selenium-webdriver #xpath
#питон #селен #селен-веб-драйвер #xpath
Вопрос:
Я пытаюсь использовать селен для выполнения следующих действий:
- Откройте веб-сайт
- Нажмите на поле поиска
- Введите «Сиэтл» в поле поиска
- Выберите первый результат из предложенных результатов
- Нажмите «Ввод»
- Нажмите на новое поле поиска
- Введите «Чикаго» в новом поле поиска
- Выберите первый результат из предложенных результатов
Мне удалось заставить его работать до шага 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:
В этом конкретном сценарии, чтобы выполнить новый поиск, вы должны сначала очистить предыдущее состояние поиска.
Это должно сработать:
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. а ну понятно. Вот как вы получаете доступ к идентификационному тегу. Большое спасибо!