我在python中使用selenium尝试通过下拉列表分页器进行迭代。卡在select_by_index上并挖掘了Stackoverflow以获得答案而没有运气。
任何帮助将不胜感激。
options = webdriver.ChromeOptions()
options.add_argument('start-maximized')
driver = webdriver.Chrome(executable_path = '/mnt/d/chromedriver/chromedriver.exe', chrome_options = options)
driver.get("http://exhibitors.jewellerynetasia.com/shenzhen2017/en/")
element = driver.find_element_by_xpath('//span[text() ="1"]')
driver.execute_script("arguments[0].scrollIntoView();", element)
element.click()
select = Select(driver.find_element_by_xpath('//select[@id="Paging1"]'))
for index in range(1, len(select.options)):
print(index)
select.select_by_index(index)
错误消息:
文件" pagitest.py",第42行,in select.select_by_index(指数)
selenium.common.exceptions.ElementNotVisibleException: 消息:元素不可见:元素当前不可见 可能不被操纵
答案 0 :(得分:0)
因为您的下拉列表是CSS下拉列表,而不是HTML本机下拉列表(纯粹由select和option标签组成),
即使您的下拉列表还包含select和option标记,但它们是隐藏的(您可以在其样式属性中找到display: none;
),因此您的下拉列表无法通过不可见的select和option标记进行控制。
要运行CSS下拉列表,您无法使用仅适用于本机下拉列表的Select
类,您必须按手动操作:
点击它展开所有选项 - >点击选项
// There are two similar dropdown, only one visible
dropdown_wrapper = driver
.find_element_by_xpath("//div[@class='page_dm'][not(contains(@style, 'none'))]");
// click wrapper to expand options to display
dropdown_wrapper
.find_element_by_css_selector("p.SelectBox").click()
// find out all options
options = dropdown_wrapper
.find_elements_by_css_selector("ul.options > li")
for index in range(1, len(options)):
print(index)
// click option
options[index].click()
// find all options again to avoid StaleElementReferenceException
// because each page number change, the page content changed
options = dropdown_wrapper
.find_elements_by_css_selector("ul.options > li")