【发布时间】:2017-03-31 23:45:51
【问题描述】:
我想用谷歌地图获取欧洲一些机场之间的旅行时间。问题是名称的某些拼写不准确,因此,我想先检查名称是否错误并获取 google 的名称版本。从这个question,我可以使用selenium 来做到这一点,但我的代码有一些问题,1)输出并不总是完整的,(最后两个结果只有一个字母)2)它在最后抛出一个异常列表(见下文)。请帮我修复代码。自动化这是唯一的方法,因为机场列表很长。
输入:
wronglySpelled = ['Treviso (San Angelo) Airport', 'Milano - Malpensa
Airport', 'Venezia - Tessera Airport', 'Milano - Linate Airport',
'Treviso (San Angelo) Airport', 'Treviso (San Angelo) Airport',
'Milano - Malpensa Airport', 'Venezia - Tessera Airport', 'Guernsey
Channel Is. Airport', 'Jersey Channel Is. Airport','Treviso (San
Angelo) Airport']
代码:
def setup():
driver = webdriver.Chrome()
driver.get("http://maps.google.com")
driver.maximize_window() # For maximizing window
driver.implicitly_wait(20) # gives an implicit wait for 20 seconds
return driver
def correct_name(driver, name_to_check):
searchBox = driver.find_element_by_name('q')
searchBox.send_keys(name_to_check)
correct_name = driver.find_element_by_class_name('suggest-bold')
return correct_name.text.encode('utf-8')
driver = setup()
for item in wronglySpelled:
print item,':', correct_name(driver, item)
time.sleep(5)
driver.find_element_by_id('searchboxinput').clear()
driver.quit()
错误信息:
Traceback (most recent call last):
File "C:/...", line 60, in <module>
print item,':', correct_name(driver, item)
File "C:/...", line 41, in correct_name
correct_name = driver.find_element_by_class_name('suggest-bold')
File "C:\...", line 415, in find_element_by_class_name
return self.find_element(by=By.CLASS_NAME, value=name)
File "C:\...", line 756, in find_element
'value': value})['value']
File "C:\...", line 238, in execute
self.error_handler.check_response(response)
File "C:\...", line 193, 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":"suggest-bold"}
(Session info: chrome=56.0.2924.87)
(Driver info: chromedriver=2.28.455520 (cc17746adff54984afff480136733114c6b3704b),platform=Windows NT 10.0.14393 x86_64)
输出:
## Formatted as Input name : Google maps version
Treviso (San Angelo) Airport : Aeroporto di Treviso Canova
Milano - Malpensa Airport : Milano Malpensa Airport
Venezia - Tessera Airport : Venice Marco Polo Airport
Milano - Linate Airport : Aeroporto Milano Linate
Treviso (San Angelo) Airport : Aeroporto di Treviso Canova
Treviso (San Angelo) Airport : Aeroporto di Treviso Canova
Milano - Malpensa Airport : m
Venezia - Tessera Airport : V
Guernsey Channel Is. Airport :
【问题讨论】:
-
您应该使用 google maps api。它应该无限快,等等。
-
当您的脚本在字段中输入
Guernsey Channel Is. Airport时,Google 没有任何建议。因此,DOM 中永远不会有一个类名为suggest-bold的元素,而这又会抛出您所看到的NoSuchElementException。 -
@LeviNoecker 对返回
m的Milano - Malpensa Airport有何解释?
标签: python google-maps selenium