无法使用Selenium向文本框发送键。出现selenium.common.exceptions.TimeoutException: 消息:
我正在尝试使用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
,但都出现了同样的错误。
请帮帮我。
1 个回答
1
问题的根本原因: 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()