无法解析网页中的某个值

时间:2017-08-16 20:20:44

标签: python python-3.x selenium selenium-webdriver web-scraping

我已经在python中编写了一些与selenium结合使用的代码来从一个网站中搜索“Latitude”,在这种情况下是“49°57'09”N(49.952500)“但由于某种原因我得到了TimeoutException而不是我无法理解我在哪里出轨。对此的任何意见都将非常感激。

我正在尝试的脚本:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.get("http://www.gcmap.com/airport/EDEF")
wait = WebDriverWait(driver, 10)

driver.switch_to_frame(0)
for item in wait.until(EC.presence_of_all_elements_located((By.XPATH, "//table[contains(@class,'vcard')]//td/abbr[@class='latitude']"))):
    print(item.text)  
driver.quit()

纬度所在的元素:

<td colspan="2" nowrap=""><abbr class="latitude" title="49.952500"></abbr>49°57'09"N (49.952500)</td>

这是我得到的错误:

80, in until
    raise TimeoutException(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message:

1 个答案:

答案 0 :(得分:3)

此处的问题是所需的文字不在<abbr>标记内,而是在其内部的<td>标记内。要查找元素的父级,您可以使用XPath&#39> 双点语法和.find_element_by_xpath("..")。此外,通过它的类名查找<abbr>比使用它的XPath更清晰。注意下面的代码不需要等待(既不明示也不隐含):

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("http://www.gcmap.com/airport/EDEF")

item = driver.find_element_by_class_name('latitude')
itemParentText = item.find_element_by_xpath("..").text
>>> print(itemParentText)
49°57'09"N (49.952500)