Python 如何遍历下拉列表并单击每个选项?
dropdownlist的id不断变化,下面是代码:Python 如何遍历下拉列表并单击每个选项?,python,selenium,webdriver,Python,Selenium,Webdriver,dropdownlist的id不断变化,下面是代码: <select class="select150" onchange="document.getElementById('id1e_hf_0').value='? wicket:interface=:5:remitReaderSearchForm:orgSelection:: IOnChangeListener::& wicket:pcxt=RemitReaderSearchP
<select class="select150"
onchange="document.getElementById('id1e_hf_0').value='?
wicket:interface=:5:remitReaderSearchForm:orgSelection::
IOnChangeListener::&
wicket:pcxt=RemitReaderSearchPage';document.getElementById
('id1e').submit();" name="orgSelection" id="id1f">
<option value="">Select One</option>
<option value="7623">MCH - Cardiovascular Surgery</option>
<option value="7598">MCH - Dept. of Orthopedics</option>
<option value="7610">MCH - Emergency Physicians</option>
<option value="7603">MCH - ENT</option>
<option value="13043178">MCH Telehealth</option>
<option value="13043153">NCH Genetics</option>
<option value="13043155">NCH Hospitalist</option>
<option value="13007836">NCH Neurology</option>
</select>
select = Select(driver.find_element_by_class_name("select150"))
options = select.options
for index in range(0, len(options) - 1):
select.select_by_index(index)
回溯:
select = Select(driver.find_element_by_class_name("select150"))
File "C:\Users\dm050767\Python27\lib\site-
packages\selenium\webdriver\remote\webdriver.py", line 555, in
find_element_by_class_name
return self.find_element(by=By.CLASS_NAME, value=name)
File "C:\Users\dm050767\Python27\lib\site-
packages\selenium\webdriver\remote\webdriver.py", line 955, in
find_element
'value': value})['value']
File "C:\Users\dm050767\Python27\lib\site-
packages\selenium\webdriver\remote\webdriver.py", line 312, in execute
self.error_handler.check_response(response)
File "C:\Users\dm050767\Python27\lib\site-
packages\selenium\webdriver\remote\errorhandler.py", line 242, in
check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such
element: Unable to locate element: {"method":"class
name","selector":"select150"}
(Session info: chrome=65.0.3325.181)
(Driver info: chromedriver=2.37.544315
(730aa6a5fdba159ac9f4c1e8cbc59bf1b5ce12b7),平台=Windows NT 10.0.15063
x86_64)要选择所有选项,您需要使用
范围(0,len(选项))
而不是范围(0,len(选项)-1)
请注意,range(start,end)
将生成从start
(包括)到end
(不包括)的索引
您也可以尝试使用以下循环:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait as wait
from selenium.webdriver.support import expected_conditions as EC
select = Select(wait(driver, 10).until(EC.presence_of_element_located((By.CLASS_NAME, "select150"))))
options = select.options
for option in options:
select.select_by_visible_text(option.text)
使用“文本”选择选项,然后单击任何异常?
id不断更改
您是否尝试构造任何动态定位器?否我没有构造动态定位器使用此代码选择下拉菜单select=select(driver.find\u element\u by\u name(“orgSelection”))这是我得到的堆栈跟踪:select=select(等待(驱动程序,10).until(EC.presence_of_element_located((By.CLASS_NAME,“select150”))文件“C:\Users\dm050767\Python27\lib\site packages\selenium\webdriver\support\wait.py”,第80行,直到引发TimeoutException(消息、屏幕、堆栈跟踪)selenium.common.exceptions.TimeoutException:消息:检查Select是否位于iframe
内,以及class name是否“select150”
不是动态的这是一个下拉列表存在的表单这是一个下拉列表存在的表单:是的,有一个iframe,所以我添加了驱动程序。使用ure代码切换到.frame(driver.find_element)(driver.find_-by_-id(“newBodyFrame”)。成功了。谢谢