Selenium 无法获取 select 结果
Selenium unable to fetch the select results
我是 selenium 的新手,正在尝试从站点(代码中的 link)获取 select 标签的值,但每当我尝试获取 select 标签时它 returns 一个空字段。
我的代码
from selenium import webdriver
from selenium.webdriver.support.ui import Select
driver = webdriver.Chrome('chromedriver',chrome_options=chrome_options)
url = 'https://lifeinsurance.adityabirlacapital.com/about-us/public-disclosure'
driver.get(url)
select = Select(driver.find_element_by_id("select-public-year"))
print([option.text for option in select.options])
# Output: ['']
当我查看页面源代码时,它显示了以下内容:
<select Name="selectPublicYear" class="demo-default select selectized selectPublicYear" id="select-public-year" name="SelectedYear">
<option value="2020-2021">2020-2021</option>
<option value="2019-2020">2019-2020</option>
<option value="2018-2019">2018-2019</option>
<option value="2017-2018">2017-2018</option>
<option value="2016-2017">2016-2017</option>
<option value="2015-2016">2015-2016</option>
<option value="2014-2015">2014-2015</option>
<option value="2013-2014">2013-2014</option>
<option value="2012-2013">2012-2013</option>
<option value="2011-2012">2011-2012</option>
<option value="2010-2011">2010-2011</option>
<option value="2009-2010">2009-2010</option>
<option value="2008-2009">2008-2009</option>
<option value="2007-2008">2007-2008</option>
<option value="2006-2007">2006-2007</option>
<option value="2005-2006">2005-2006</option>
</select>
任何提示或帮助将不胜感激。
这似乎是同步问题。我建议使用 WebDriverWait()
并等待 element_to_be_clickable
()
select = Select(WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.ID,"select-public-year"))))
print([option.text for option in select.options])
您需要导入以下库
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
使用 java 测试快照,因为我的工作机器中没有 python。
<select>
标签具有 style="display: none;"
属性,因此这不是您想要的元素。
提取文本,例如2020-2021,来自所有 <class="option">
使用 and python you have to induce for visibility_of_all_elements_located()
and you can use either of the following :
使用CSS_SELECTOR
:
driver.get('https://lifeinsurance.adityabirlacapital.com/about-us/public-disclosure')
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div.selectize-input.items.full.has-options.has-items"))).click()
print([my_elem.text for my_elem in WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "div.selectize-dropdown-content div.option")))])
使用XPATH
:
driver.get('https://lifeinsurance.adityabirlacapital.com/about-us/public-disclosure')
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='selectize-input items full has-options has-items']"))).click()
print([my_elem.text for my_elem in WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.XPATH, "//div[@class='selectize-dropdown-content']//div[contains(@class, 'option')]")))])
控制台输出:
['2020-2021', '2019-2020', '2018-2019', '2017-2018', '2016-2017', '2015-2016', '2014-2015', '2013-2014', '2012-2013', '2011-2012', '2010-2011', '2009-2010', '2008-2009', '2007-2008', '2006-2007', '2005-2006']
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
我是 selenium 的新手,正在尝试从站点(代码中的 link)获取 select 标签的值,但每当我尝试获取 select 标签时它 returns 一个空字段。
我的代码
from selenium import webdriver
from selenium.webdriver.support.ui import Select
driver = webdriver.Chrome('chromedriver',chrome_options=chrome_options)
url = 'https://lifeinsurance.adityabirlacapital.com/about-us/public-disclosure'
driver.get(url)
select = Select(driver.find_element_by_id("select-public-year"))
print([option.text for option in select.options])
# Output: ['']
当我查看页面源代码时,它显示了以下内容:
<select Name="selectPublicYear" class="demo-default select selectized selectPublicYear" id="select-public-year" name="SelectedYear">
<option value="2020-2021">2020-2021</option>
<option value="2019-2020">2019-2020</option>
<option value="2018-2019">2018-2019</option>
<option value="2017-2018">2017-2018</option>
<option value="2016-2017">2016-2017</option>
<option value="2015-2016">2015-2016</option>
<option value="2014-2015">2014-2015</option>
<option value="2013-2014">2013-2014</option>
<option value="2012-2013">2012-2013</option>
<option value="2011-2012">2011-2012</option>
<option value="2010-2011">2010-2011</option>
<option value="2009-2010">2009-2010</option>
<option value="2008-2009">2008-2009</option>
<option value="2007-2008">2007-2008</option>
<option value="2006-2007">2006-2007</option>
<option value="2005-2006">2005-2006</option>
</select>
任何提示或帮助将不胜感激。
这似乎是同步问题。我建议使用 WebDriverWait()
并等待 element_to_be_clickable
()
select = Select(WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.ID,"select-public-year"))))
print([option.text for option in select.options])
您需要导入以下库
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
使用 java 测试快照,因为我的工作机器中没有 python。
<select>
标签具有 style="display: none;"
属性,因此这不是您想要的元素。
提取文本,例如2020-2021,来自所有 <class="option">
使用 visibility_of_all_elements_located()
and you can use either of the following
使用
CSS_SELECTOR
:driver.get('https://lifeinsurance.adityabirlacapital.com/about-us/public-disclosure') WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div.selectize-input.items.full.has-options.has-items"))).click() print([my_elem.text for my_elem in WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "div.selectize-dropdown-content div.option")))])
使用
XPATH
:driver.get('https://lifeinsurance.adityabirlacapital.com/about-us/public-disclosure') WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='selectize-input items full has-options has-items']"))).click() print([my_elem.text for my_elem in WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.XPATH, "//div[@class='selectize-dropdown-content']//div[contains(@class, 'option')]")))])
控制台输出:
['2020-2021', '2019-2020', '2018-2019', '2017-2018', '2016-2017', '2015-2016', '2014-2015', '2013-2014', '2012-2013', '2011-2012', '2010-2011', '2009-2010', '2008-2009', '2007-2008', '2006-2007', '2005-2006']
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC