Selenium Python元素从下拉菜单中选择

j1dl9f46  于 2022-12-13  发布在  Python
关注(0)|答案(1)|浏览(192)

尝试通过python中的selenium从下拉菜单中选择多个元素。
来自URL的Website。但发生Timeoutexception错误。
我试过GoogleChrome的Inspect菜单。//label[@for="inputGenre"]/parent::div//select[@placeholder="Choose a Category"]给出了我需要的select标签。但不幸的是,使用selenium时,我找不到这个标签中的任何元素。你知道为什么会出现这个错误吗?
代码如下;

slect_element = Select(WebDriverWait(driver, 10).until(EC.element_located_to_be_selected((By.XPATH, '//label[@for="inputGenre"]/parent::div//select[@placeholder="Choose a Category"]'))))

slect_element.select_by_index(1)
slect_element.select_by_value('23')

奇怪的是,可以找到它并从下面的代码中获得它的文本值;

drp_menu=driver.find_elements(By.XPATH,'//label[@for="inputGenre"]/parent::div//div[@class="dropdown-main"]/ul/li')
print(len(drp_menu))
ls_categories=[]
for i in drp_menu:
    ls_categories.append(i.get_attribute('innerText'))

print给出了15个元素,get_attribute(innerText)给出了每个option元素的文本。

bvhaajcl

bvhaajcl1#

该Select元素是隐藏的,不能被Selenium使用,因为我们使用普通的Select元素来选择下拉菜单项。
在这里,我们需要打开下拉菜单,就像我们打开任何其他元素一样,方法是单击它们,选择所需的选项,然后单击“搜索”(Search)按钮。
因此,这些行将打开下拉菜单,并在下拉菜单中选择2个选项:

wait.until(EC.element_to_be_clickable((By.XPATH, "//div[@class='form-group'][contains(.,'Category')]//div[@class='dropdown-display-label']"))).click()
wait.until(EC.element_to_be_clickable((By.XPATH, "//div[@class='form-group'][contains(.,'Category')]//li[@data-value='23']"))).click()
wait.until(EC.element_to_be_clickable((By.XPATH, "//div[@class='form-group'][contains(.,'Category')]//li[@data-value='1']"))).click()

到目前为止的结果是:

最后单击“搜索”按钮,结果为:

整个代码是:

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
options = Options()
options.add_argument("start-maximized")

webdriver_service = Service('C:\webdrivers\chromedriver.exe')
driver = webdriver.Chrome(service=webdriver_service, options=options)
wait = WebDriverWait(driver, 20)

url = "https://channelcrawler.com/"

driver.get(url)

wait.until(EC.element_to_be_clickable((By.XPATH, "//div[@class='form-group'][contains(.,'Category')]//div[@class='dropdown-display-label']"))).click()
wait.until(EC.element_to_be_clickable((By.XPATH, "//div[@class='form-group'][contains(.,'Category')]//li[@data-value='23']"))).click()
wait.until(EC.element_to_be_clickable((By.XPATH, "//div[@class='form-group'][contains(.,'Category')]//li[@data-value='1']"))).click()
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button[type='submit']"))).click()

相关问题