Я пытаюсь отправить ключи в текстовое поле панели поиска с помощью Selenium, но получаю ошибку:
Traceback (most recent call last):
File ".\test.py", line 19, in <module>
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input#typeahead-input-56352"))).send_keys("2216 NW 6 PL FORT LAUDERDALE")
File "D:\Python Projects\Title Search\titlesearch\lib\site-packages\selenium\webdriver\support\wait.py", line 95, in
until
raise TimeoutException(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message:
Stacktrace:
GetHandleVerifier [0x00007FF6D9C9AD02+56930]
(No symbol) [0x00007FF6D9C0F602]
(No symbol) [0x00007FF6D9AC42E5]
(No symbol) [0x00007FF6D9B098ED]
(No symbol) [0x00007FF6D9B09A2C]
(No symbol) [0x00007FF6D9B4A967]
(No symbol) [0x00007FF6D9B2BCDF]
(No symbol) [0x00007FF6D9B481E2]
(No symbol) [0x00007FF6D9B2BA43]
(No symbol) [0x00007FF6D9AFD438]
(No symbol) [0x00007FF6D9AFE4D1]
GetHandleVerifier [0x00007FF6DA016F8D+3711213]
GetHandleVerifier [0x00007FF6DA0704CD+4077101]
GetHandleVerifier [0x00007FF6DA06865F+4044735]
GetHandleVerifier [0x00007FF6D9D39736+706710]
(No symbol) [0x00007FF6D9C1B8DF]
(No symbol) [0x00007FF6D9C16AC4]
(No symbol) [0x00007FF6D9C16C1C]
(No symbol) [0x00007FF6D9C068D4]
BaseThreadInitThunk [0x00007FFD02F37344+20]
RtlUserThreadStart [0x00007FFD03F226B1+33]
Мой код, который я использую для отправки ключей:
# Import Dependencies
from bs4 import BeautifulSoup as bs
from selenium import webdriver
from selenium.webdriver.support.ui import Select
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.action_chains import ActionChains
import time
options = webdriver.ChromeOptions()
options.headless = True
driver = webdriver.Chrome()
driver.maximize_window()
driver.get("https://broward.county-taxes.com/public/search/property_tax")
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, '//*[@class = "svg-icon"]'))).click()
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input#typeahead-input-56352"))).send_keys("2216 NW 6 PL FORT LAUDERDALE")
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, '//*[@id = "search-icon"]/svg'))).click()
Я даже закрываю всплывающее окно перед отправкой ключей. Я использовал XPATH, CSS_SELECTOR оба. И оба, похоже, получают одну и ту же ошибку.
Пожалуйста помоги.






Основная причина проблемы: значение атрибута ID является динамическим. Итак, input#typeahead-input-56352 это не сработает. Каждый раз при загрузке страницы число (56352) меняется.
Решение. Вместо этого вы можете использовать стратегию локатора XPath, и выражение XPath может быть: //input[@role='searchbox']
Измените строку ниже:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input#typeahead-input-56352"))).send_keys("2216 NW 6 PL FORT LAUDERDALE")
К:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@role='searchbox']"))).send_keys("2216 NW 6 PL FORT LAUDERDALE")
Примечание. Кроме того, в следующей строке выражение XPath //*[@id = "search-icon"]/svg неверно, оно не находит ни одного элемента. Я исправил это в приведенном ниже рабочем коде.
Проверьте рефакторинг и рабочий код ниже:
driver = webdriver.Chrome()
driver.maximize_window()
wait = WebDriverWait(driver, 20)
driver.get("https://broward.county-taxes.com/public/search/property_tax")
wait.until(EC.element_to_be_clickable((By.XPATH, '//*[@class = "svg-icon"]'))).click()
wait.until(EC.element_to_be_clickable((By.XPATH, '//input[@role = "searchbox"]'))).send_keys("2216 NW 6 PL FORT LAUDERDALE")
wait.until(EC.element_to_be_clickable((By.XPATH, '//span[@id = "search-icon"]'))).click()
Я бы сказал, что средний элемент, на котором вы используете .send_keys(), не обязательно должен быть кликабельным... просто видимым.
Спасибо вам обоим. Понял. Допустим, если я хочу использовать CTRL + P на странице, а затем сохранить распечатку в формате PDF, нужна ли мне для этого цепочка действий? И когда появится предварительный просмотр печати, нужно ли переключать кадры?
@Daremitsu Обратите внимание, как он объявляет
wait, а затем повторно использует его каждый раз, когда ему нужно подождать. Это правильный способ использоватьWebDriverWaitвместо создания нового экземпляра для каждого ожидания. Единственный раз, когда вам понадобится создать экземпляр нового экземпляра, — это изменить тайм-аут.