Selenium Python尝试通过下拉分页器进行迭代,但不能使select_by_index工作

时间:2018-02-07 00:10:09

标签: python selenium pagination

我在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:         消息:元素不可见:元素当前不可见         可能不被操纵

1 个答案:

答案 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")