我需要从下拉菜单中将所有值导入GUI中的组合框。
之后,我需要通过单击组合框来选择一个值。
但是它不起作用。 请帮助我从下拉列表中选择一个值。 如何获得下拉菜单中所有可用的文本值?
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.common.exceptions import TimeoutException
from PyQt5.QtWidgets import QApplication
from selenium import webdriver
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import StaleElementReferenceException
from selenium.webdriver.common.keys import Keys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtGui import QIcon, QPixmap
import time
import os
def first(self):
url = 'https://www....aspx'
driver = webdriver.Chrome(executable_path="chromedriver.exe")
driver.get(url)
s1 = Select(driver.find_element_by_id('select2-ctl00_PlaceHolderMain_oDistributionUC_ddlClass-container'))
all_options = s1.options
for options in all_options:
self.comboBoxClass.addItem(options.text)
print(options.text)
self.comboBoxClass.activated.connect(self.loading_2)
def loading_2(self):
s1.select_by_visible_text(str(self.comboBoxClass.currentText()))
HTML代码:
<div id="ctl00_PlaceHolderMain_oDistributionUC_oClassUpdatePanel">
<div id="ctl00_PlaceHolderMain_oDistributionUC_trEmptyRow" class="col-xs-12 no_padding">
<div class="col-xs-5 col-sm-4">
<span class="manditory"></span>
</div>
<div class="col-xs-7 col-sm-8 feild_data">
</div>
</div>
<div id="ctl00_PlaceHolderMain_oDistributionUC_trClass" class="col-xs-12 no_padding">
<div class="col-xs-5 col-sm-4 feild_title divDistributionSearchTitle">
<span id="ctl00_PlaceHolderMain_oDistributionUC_tdStar04" class="manditory">*</span>
<span id="ctl00_PlaceHolderMain_oDistributionUC_lblClass" class="StandardFont" style="display:inline-block;width:120px;">class</span>
</div>
<div class="col-xs-7 col-sm-8 feild_data divDistributionSearchData">
<select name="ctl00$PlaceHolderMain$oDistributionUC$ddlClass" onchange="javascript:setTimeout('__doPostBack(\'ctl00$PlaceHolderMain$oDistributionUC$ddlClass\',\'\')', 0)" id="ctl00_PlaceHolderMain_oDistributionUC_ddlClass" class="control-dropdownlist" style="width:100%;">
<option selected="selected" value="-99">-- chose --</option>
<option value="1,1">good1 </option>
<option value="2,1">good2 </option>
<option value="3,1">good3 </option>
<option value="4,1">good4 </option>
<option value="5,1">good5 </option>
<option value="6,1">good6 </option>
</select>
<div id="ctl00_PlaceHolderMain_oDistributionUC_tdValidatorClass">
<div id="ctl00_PlaceHolderMain_oDistributionUC_oUpdatePanelrfvClass">
<span id="ctl00_PlaceHolderMain_oDistributionUC_rfvClass" class="ValidationClass" style="display:inline-block;width:100px;display:none;"> chose class.</span>
诸如good1,good2,good3等的值...
更新:
感谢NitishKshirsagar 现在正在工作:
drop_down = driver.find_element_by_css_selector('#ctl00_PlaceHolderMain_oDistributionUC_trClass .divDistributionSearchData')
ActionChains(driver).move_to_element(drop_down).perform()
drop_down.click()
drop_down = driver.switch_to.active_element
element = driver.find_element_by_css_selector("#ctl00_PlaceHolderMain_oDistributionUC_trClass .divDistributionSearchData select")
all_options = element.find_elements_by_tag_name("option")
for option in all_options:
print(option.text)
答案 0 :(得分:0)
由于下拉列表不是“选择”类型,因此不能在此下拉列表上使用“选择”方法。您需要使用其xpath单击该元素。 您可以这样做:
em = driver.find_elements_by_xpath("//span[@class='select2-selection select2-selection--single']//span[@id='select2-ctl00_PlaceHolderMain_oDistributionUC_ddlClass-container']")