当前位置: 首页 > 知识库问答 >
问题:

Python selenium无法选择下拉列表[重复]

谭景福
2023-03-14

我试图从下拉菜单中选择一个选项,然后单击“搜索”,但我无法获得“选择”标签。

我抓取的HTML如下:

 <select class="form-control ng-pristine ng-untouched ng-valid ng-scope ng-
    empty" ng-class="{ 'select_selected' : selected.destinationList}" ng-
    model="selected.destinationList" ng-if="!bIsLoading" ng-
    change="applyPrefetch()" ng-disabled="bSearchLoading" ng-
    options="maps.itineraries[dest].Name for dest in prefetch.itineraries 
    track by dest">
 <option value="" selected="selected" class="">Seleziona
 destinazione</option>
 <option label="Caraibi" value="1">Caraibi</option>
 <option label="Emirati Arabi" value="2">Emirati Arabi</option>
 <option label="Giro del Mondo" value="3">Giro del Mondo</option>
 <option label="America" value="4">America </option>

 </select>

我想选择的选项是:

<option label="Caraibi" value="1">Caraibi</option>

我使用的代码如下:

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

driver = webdriver.Chrome(executable_path=r"C:example\chromedriver.exe")

# Open the url
driver.get('https://www.examplesite.com')

# select by css selector
select = Select(driver.find_elements_by_css_selector(".form-control"))

# select by visible text
select.select_by_visible_text('Caraibi')

所以,我试图以不同的方式获得“选择”标签,我得到了不同的问题。

例如:

第一次尝试)

select = Select(driver.find_elements_by_class_name("form-control ng-valid ng-scope ng-not-empty ng-dirty ng-valid-parse select_selected ng-touched"))

我得到:

InvalidSelectorException: invalid selector: Compound class names not 
permitted
(Session info: chrome=64.0.3282.186)
(Driver info: chromedriver=2.32.498550 
(9dec58e66c31bcc53a9ce3c7226f0c1c5810906a),platform=Windows NT 6.1.7601 SP1 
x86_64)

第二次尝试)

select = Select(driver.find_elements_by_class_name(".form-control.ng-
valid.ng-scope.ng-not-empty.ng-dirty.ng-valid-parse.select_selected.ng-
touched"))

我得到:

AttributeError: 'list' object has no attribute 'tag_name'

第三次尝试)

driver.find_elements_by_xpath("//select[@class='form-control ng-pristine ng-
untouched ng-valid ng-scope ng-empty']")

我得到一个空列表:

Out[81]: []

第 4 次尝试)

driver.find_element_by_css_selector(".form-control.ng-pristine.ng-valid.ng-scope.ng-empty.ng-touched")

我得到一个空列表:

Out[82]: []

第5次尝试)

dropdown = driver.find_element_by_xpath("//select[@class='form-control ng-pristine ng-valid ng-scope ng-empty ng-touched']/option[text()= Caraibi]").click()

我得到:

NoSuchElementException: no such element: Unable to locate element: 
{"method":"xpath","selector":"//select[@class='form-control ng-pristine ng-
valid ng-scope ng-empty ng-touched']/option[text()= Mediterraneo]"}
(Session info: chrome=64.0.3282.186)
(Driver info: chromedriver=2.32.498550 
(9dec58e66c31bcc53a9ce3c7226f0c1c5810906a),platform=Windows NT 6.1.7601 SP1 
 x86_64)

有人知道如何解决这个问题吗?提前感谢!

共有1个答案

松嘉运
2023-03-14

最好的选择是使用 try 除了 block 来捕获异常,而你的 rest 代码运行正常。此外,您的语法有点混乱。

试试这个:

try:
    drop = browser.find_elements_by_css_selector('#someID').click() 
except:
    print("Menu not found") 
 类似资料:
  • 我正在尝试自动选择硒离子中的下拉列表,但我无法使其正常工作。 基本上,我在菜单项上记录了一次单击,这会显示下拉菜单,但每当我在其中一个选项上使用单击命令时,它都会关闭菜单,而不会选择新选项。我也尝试了select命令,但我一直得到“指定元素不是select” 任何想法?

  • WebElement drpAmentization=driver.findElement(by.xpath(“//select[@id='Amentissement']”));

  • 我试图从2个Ajax下拉字段中选择一个特定的值。第一个下拉选项列表打开,但没有选择选项,这就是为什么第二个下拉列表没有绑定并且错误发生的原因 org.openqa.selenium.nosuchelementException:找不到Element:option[value=“111”]。 请帮帮我..我是硒的新手 这是我的代码..

  • 我正在使用cucumber with capybara来实现web应用程序的自动化。我必须从下拉列表中选择一个值,但很多时候我会得到一个错误,比如;“参数类型字符串错误(应为数组)(TypeError)” 我试过用:1。

  • 问题内容: 我创建了一个客户c#DropDownList控件,可以将其内容呈现为optgroup(不是从头开始,我编辑了一些在Internet上找到的代码,尽管我确切地了解了它的作用),并且工作正常。 但是,我现在遇到一种情况,我需要在下拉菜单中有两个缩进级别,即 但是,在上面的示例代码段中,它呈现的缩进量与相同。 有没有一种方法可以产生我想要的嵌套optgroup行为? 问题答案: 好的,如果有

  • 问题内容: 我需要使用cypress测试angularjs应用程序的下拉列表。 我需要单击一个下拉列表,然后从下拉列表中选择或单击一个项目。我尝试如下所示,它只能在一个实例上使用,而不能在其他情况下使用,因为第二个get()方法中的ID号随着其动态生成而不断变化。这不是带有html中选项的标准选择。 1)无论如何,我可以在每个选项上设置一个唯一属性并仅选择所需的属性,还是可以仅基于列表项的描述进行