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

selenium Web驱动程序访问列表框值

安坚诚
2023-03-14

我在使用Selenium web驱动程序访问列表框值时遇到了问题。

我能够粘贴值并传递我想选择的列表的类名,基本上我必须每次选择列表中显示的第一个选项

 1   driver.get('https://my.maerskline.com/schedules/vessel')
 2   button = driver.find_element_by_id("s2id_b-vesselCode")   
 3   button.click()        
 4   button1 = driver.find_element_by_id("s2id_autogen1_search")
 5   button1.send_keys(Vessel_name)        
 6   button3 = driver.find_element_by_id("select2-results-dept-0 select2-result select2-result-selectable")
 7   button3.click()
 8   button2 = driver.find_element_by_id("schedulesByVesselSearchButton")
    button2.click()

第6行给我以下错误

selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element:
{"method":"id","selector":"select2-results-dept-0 select2-result
select2-result-selectable"}   (Session info: chrome=55.0.2883.87)  
(Driver info: chromedriver=2.26.436362 (5476ec6bf7ccbada1734a0cdec7d570bb042aa30),platform=Windows NT 6.1.7601 SP1 x86_64)

任何想法,我怎么能做到这一点?任何需要的信息让我知道。谢谢

更新代码

if Vessel_name != "":
        #driver.get('https://my.maerskline.com/vessels?searchTerm={0}'.format(Vessel_name))
        print(Vessel_name)

        driver.get('https://my.maerskline.com/schedules/vessel')
        button = driver.find_element_by_id("s2id_b-vesselCode")   
        button.click()        
        button1 = driver.find_element_by_id("s2id_autogen1_search")
        button1.send_keys(Vessel_name)       
        button3 =driver.find_element_by_css_selector("#select2-results-1>li:nth-child(1)")
        button3.click()
        #button2 = driver.find_element_by_id("schedulesByVesselSearchButton")
        #button2.click()
        try:



        soup = BeautifulSoup(driver.page_source)

共有3个答案

权黎昕
2023-03-14

您正在调用find_element_by_id,但给出了类名。您应该使用<code>element_by_css_selector(“#select2-results-1

"#select2-results-1 > li:nth-child(1)" >> MAJESTIC   
"#select2-results-1 > li:nth-child(2)" >> MAJESTC MAERSK   
"#select2-results-1 > li:nth-child(3)" >> NORTHERN MAJESTC    

检查以下内容

driver.get('https://my.maerskline.com/schedules/vessel')
button = driver.find_element_by_id("s2id_b-vesselCode")   
button.click()        
button1 = driver.find_element_by_id("s2id_autogen1_search")
button1.send_keys(Vessel_name)        
button3 = driver.find_element_by_css_selector("#select2-results-1 > li:nth-child(2)")
button3.click()
button2 = driver.find_element_by_id("schedulesByVesselSearchButton")
button2.click()

检查此代码是否有效:

>>> driver.button = driver.find_element_by_id("s2id_b-vesselCode")
>>> button = driver.find_element_by_id("s2id_b-vesselCode")
>>> button.click()
>>> button1 = driver.find_element_by_id("s2id_autogen1_search")
>>> button1.send_keys(Vessel_name)
>>> button1.send_keys("majestic")
>>> button3 = driver.find_element_by_css_selector("#select2-results-1 > li:nth-child(2)")
>>> button3.click()
>>> button2 = driver.find_element_by_id("schedulesByVesselSearchButton")
>>> button2.click()
>>> driver.find_element_by_css_selector(".muted.scheduleVesselHeader").text
u'Port Terminal Arrival Voyage Departure'
>>> driver.find_element_by_css_selector("tbody > tr:nth-child(2)").text
u'Rotterdam\nAPM 2 Terminal Maasvlakte II 15 Jan 2017, 06:00 649W | 649W 17 Jan 2017, 05:00'
公冶森
2023-03-14

您应该通过类名来定位元素。您提供的图像中的元素没有任何id。

试试这个xpath:

//ul[@id='select2-results-1']/li[@‌​class='selec‌​t2-results-dept-0 select2-result select2-result-selectable select2-highlighted']

如果您确定始终要选择第一个 li,则可以通过引用其索引使 xpath 更加整洁:

(//ul[@id='select2-results-1']/li)[1]
步衡
2023-03-14

因为这是带有值的下拉,您应该用户选择类来标识Web元素

您可以参考以下链接来解决此问题:-

硒 - 蟒蛇 - 下拉菜单选项值

 类似资料:
  • 问题内容: 我试图单击此页面上的元素: 在这一点上,我想单击“现金流量”,“资产负债表”或“季度”。我知道这些按钮已加载,因为我可以使用BeautifulSoup从页面源中提取它们。但是,当我尝试使用Selenium时: 全部返回“无法定位元素”,除了“季度”返回一个元素,但它位于图上方的一个元素而不是我感兴趣的表格上方的一个元素。 我认为这是由于位于错误的iframe中,而我找到了所有ifram

  • 我尝试用java的selenium webdriver访问blogger搜索框。但是我也有例外,比如 线程“主”组织中的异常 openqa.硒.NoSuch元素异常: 无法找到元素: {“method”:“name”,“selector”:“q”} 我的代码是这样的..... 但它不工作,我也尝试与类名,xpath,id,名称,但它不工作.. 请给我任何建议?

  • im通过IBM Client Access ODBC驱动程序与DB2数据库连接。如何列出所有表和列? 像在SQL-Server information_schema.columns中还是在Oracle all_tab_columns中? 你好,丹尼斯

  • 我正在创建一个程序,它从一个文件中获取输入(在我的例子中,是学生姓名及其相关联的编号),并以预购形式(使用/iterator)、后置+后置形式(使用/recursive)打印出来。在我的驱动程序中,我已经成功地创建和添加了学生的名字+关联号码+用预购迭代器打印出来。然而,我的问题是当我尝试打印这两个递归方法时,我得到一个“Void type not allowed here”错误。这两个方法存储在

  • 问题内容: 我知道已经有类似的问题,但是那里的答案并没有帮助我。因此,请介意查看我的特定问题吗? 我对Hibernate的使用还不是很熟练,并且在尝试使用Hibernate 4.3和PostgreSQL为本地数据库创建测试数据时遇到了一个问题。 我有另一个项目,我以完全相同的方式进行操作,并且在那里工作,因此我进行了完全相同的设置,但使用了另一个数据库,但是现在在我的当前项目中,我得到以下异常:

  • null 附加注释 从列表中删除歌曲时,不能在数组中留下空点。你将如何处理这件事?不要使用ArrayList来管理您的歌曲,您必须使用数组。不要为此赋值扩展ArrayList。我们稍后会这样做;-)如果您想这样做,您可以自由地编写额外的“帮助器”方法。我列出的方法是作业的最低要求。如果有帮助,您可以随时添加更多的方法。 为歌曲、播放列表和驱动程序类提交什么.java文件。 驱动程序类 我的问题是我