我正在尝试学习如何在Python中使用Selenium。我正在编写一些将在www.kijiji.ca上运行搜索的代码。我可以选择搜索字段并输入查询,但是我不知道如何从列表中选择城市。在Selenium文档中,我发现它的使用位置:
from selenium.webdriver.support.ui import Select
select = Select(driver.find_element_by_name('name'))
但是,当我尝试使用代码时,出现错误消息:“选择仅适用于选择元素,不适用于输入”
我再次检查了页面,似乎下拉菜单使用了输入而不是选择。有人可以帮我弄清楚如何使用Selenium在这里选择城市吗?
答案 0 :(得分:0)
如果您的元素是<select>
标记,则可以使用Select类。请参阅seleniumhq,其中提到了为SELECT标记建模,提供了用于选择和取消选择选项的辅助方法。
特定于您的元素,您可以尝试下面的代码,因为我们手动模拟了点击之类的动作。
driver.find_element_by_id("SearchLocationPicker").click()
driver.find_element_by_css_selector("li a[title='Manitoba']").click()
driver.find_element_by_css_selector("li a[title='Flin Flon']").click()
我的工作很好。让我知道您是否有任何疑问。
答案 1 :(得分:0)
该页面使用了不能与硒Select
类进行交互的自定义选择组件。 Select类只能用于默认的html select component。
我们必须按照手动步骤进行操作,
对于您而言,我们可以选择带有标题属性的下拉列表,也可以通过选择列表中锚标记的显示值来选择下拉列表。
<a title="Territories">Territories</a>
def select_by_title(value):
# click the input component
driver.find_element_by_css_selector('input#SearchLocationPicker"]').send_keys(value)
# Wait for the value to appear in dropdown.
wait = WebDriverWait(driver, 60)
element = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, '#SearchLocationPicker~div>ul>li>a[title="'+value+'"')))
# Click the element
element.click()
或
def select_by_display_value(value):
driver.find_element_by_css_selector('#SearchLocationPicker"]').send_keys(value)
wait = WebDriverWait(driver, 60)
element = wait.until(EC.visibility_of_element_located((By.XPATH, '//input[@id="SearchLocationPicker"]/following-sibling::div/ul/li/a[text() = "'+value+'"]')))
element.click()