我在访问列表框值时遇到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)
答案 0 :(得分:0)
您应该按类名定位元素。您提供的图片中的元素没有任何ID。
将此xpath设为:
//ul[@id='select2-results-1']/li[@class='select2-results-dept-0 select2-result select2-result-selectable select2-highlighted']
如果您确定总是想要选择第一个li
,可以通过引用其索引使xpath更整洁:
(//ul[@id='select2-results-1']/li)[1]
答案 1 :(得分:0)
答案 2 :(得分:0)
您正在呼叫find_element_by_id
但是要提供课程名称。您应该使用element_by_css_selector("#select2-results-1 > li:nth-child(2)")
作为第二选项。
"#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'