无法找到自动完成选项的元素
Unable to locate element of autocomplete options
在我的应用程序中,我有一个文本框,当我输入城市名称时,它会显示城市名称
select a city.when 我正在尝试定位元素,它说无法定位元素。
这是 HTML 代码
<ul id="autocomplete-options-fd419e03-fc56-725a-dc68-0dd3e55a2b19" class="autocomplete-content
dropdown-content" tabindex="0" style="display: block; width: 231.948px; left: 5px; top: 54px;
height: 50px; transform-origin: 0px 0px; opacity: 1; transform: scaleX(1) scaleY(1);">
<li class="active"><span><span class="highlight">Hyderabad</span></span></li></ul>
这是我的脚本代码
driver.find_element_by_name('residential_city_id').send_keys("Hyderabad")
tme.sleep(5)
html_list=driver.find_element_by_id("autocomplete-options-fd419e03-fc56-725a-dc68-0dd3e55a2b19")
items = html_list.find_elements_by_tag_name("li")
for item in items:
text = item.text
print(text)
我收到以下错误
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate
element: {"method":"css selector","selector":"[id="autocomplete-options-fd419e03-fc56-725a-dc68-0dd3e55a2b19"]"}
(Session info: chrome=76.0.3809.132)
我认为您的问题出在以下代码行中:
html_list=driver.find_element_by_id("autocomplete-options-fd419e03-fc56-725a-dc68-0dd3e55a2b19")
items = html_list.find_elements_by_tag_name("li")
ID autocomplete-options-fd419e03-fc56-725a-dc68-0dd3e55a2b19
看起来像一个随机 ID,它会在您每次刷新页面时发生变化。在这种情况下,您想使用更强大的选择器。
我认为根本不需要获取 items
列表。我想你可以用一行代码替换上面的两行代码:
driver.find_element_by_xpath("//span[text()='Hyderabad']")
这将找到带有文本 Hyderabad
的 span
元素
现在您的代码将如下所示:
driver.find_element_by_name('residential_city_id').send_keys("Hyderabad")
tme.sleep(5)
driver.find_element_by_xpath("//span[text()='Hyderabad']")
到 click()
在 自动完成 元素上 Hyderabad 你需要诱导 WebDriverWait 代表 element_to_be_clickable()
并且您可以使用以下任一项 :
使用CSS_SELECTOR
:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "ul.autocomplete-content.dropdown-content li.active > span > span.highlight"))).click()
使用XPATH
:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//ul[@class='autocomplete-content dropdown-content']//li[@class='active']/span/span[@class='highlight' and text()='Hyderabad']"))).click()
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
在我的应用程序中,我有一个文本框,当我输入城市名称时,它会显示城市名称 select a city.when 我正在尝试定位元素,它说无法定位元素。
这是 HTML 代码
<ul id="autocomplete-options-fd419e03-fc56-725a-dc68-0dd3e55a2b19" class="autocomplete-content
dropdown-content" tabindex="0" style="display: block; width: 231.948px; left: 5px; top: 54px;
height: 50px; transform-origin: 0px 0px; opacity: 1; transform: scaleX(1) scaleY(1);">
<li class="active"><span><span class="highlight">Hyderabad</span></span></li></ul>
这是我的脚本代码
driver.find_element_by_name('residential_city_id').send_keys("Hyderabad")
tme.sleep(5)
html_list=driver.find_element_by_id("autocomplete-options-fd419e03-fc56-725a-dc68-0dd3e55a2b19")
items = html_list.find_elements_by_tag_name("li")
for item in items:
text = item.text
print(text)
我收到以下错误
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate
element: {"method":"css selector","selector":"[id="autocomplete-options-fd419e03-fc56-725a-dc68-0dd3e55a2b19"]"}
(Session info: chrome=76.0.3809.132)
我认为您的问题出在以下代码行中:
html_list=driver.find_element_by_id("autocomplete-options-fd419e03-fc56-725a-dc68-0dd3e55a2b19")
items = html_list.find_elements_by_tag_name("li")
ID autocomplete-options-fd419e03-fc56-725a-dc68-0dd3e55a2b19
看起来像一个随机 ID,它会在您每次刷新页面时发生变化。在这种情况下,您想使用更强大的选择器。
我认为根本不需要获取 items
列表。我想你可以用一行代码替换上面的两行代码:
driver.find_element_by_xpath("//span[text()='Hyderabad']")
这将找到带有文本 Hyderabad
span
元素
现在您的代码将如下所示:
driver.find_element_by_name('residential_city_id').send_keys("Hyderabad")
tme.sleep(5)
driver.find_element_by_xpath("//span[text()='Hyderabad']")
到 click()
在 自动完成 元素上 Hyderabad 你需要诱导 WebDriverWait 代表 element_to_be_clickable()
并且您可以使用以下任一项
使用
CSS_SELECTOR
:WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "ul.autocomplete-content.dropdown-content li.active > span > span.highlight"))).click()
使用
XPATH
:WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//ul[@class='autocomplete-content dropdown-content']//li[@class='active']/span/span[@class='highlight' and text()='Hyderabad']"))).click()
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC