当select tag style属性设置为display:none时,如何从下拉列表中检索值:在python selenium

时间:2018-04-07 08:39:13

标签: python selenium selenium-webdriver web-scraping display

我正在尝试从一个网站中删除所有类别的下拉列表。但是选项的文本属性仅为空白。虽然在检查时,我可以看到每个选项都有文字。

from selenium import webdriver
from selenium.webdriver.support.ui import Select

driver = webdriver.Chrome()
driver.get('https://www.fiyo.nl/')

driver.find_element_by_xpath('//*[@id="select_device_chosen"]/a').click()
select = Select(driver.find_element_by_xpath('//*[@id="select-device"]'))
print ([o.text for o in select.options]) 

输出:

['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '']

如果我得到文本,我想循环遍历所有值以获得其他下拉列表的不同组合。

2 个答案:

答案 0 :(得分:2)

如果您尝试以下操作,则样式标记不是需要考虑的障碍。

from selenium import webdriver

driver = webdriver.Chrome()
driver.get('https://www.fiyo.nl/')

driver.find_element_by_xpath('//*[@id="select_device_chosen"]/a').click()
items = ' '.join([item.get_attribute("textContent") for item in driver.find_elements_by_xpath("//*[@class='chosen-results']//*[@class='active-result']")])
print(items.split())

driver.quit()

答案 1 :(得分:1)

<select>代码将样式属性设置为 display:none; ,以便您可以使用以下代码块打印选项:

driver.find_element_by_xpath('//*[@id="select_device_chosen"]/a').click()
element = driver.find_element_by_xpath("//select[@id='select-device']")
driver.execute_script("arguments[0].removeAttribute('style')", element)
select = Select(driver.find_element_by_xpath("//*[@id='select-device']"))
print ([o.text for o in select.options])