【发布时间】:2018-06-19 04:33:10
【问题描述】:
我正在尝试使用 Python 和 Selenium 从 http://fuelinsights.gasbuddy.com/Charts 抓取数据。困难的部分是数据仅在折线图上的一个点悬停时才会出现。目前,我的问题是无法创建所有悬停在对象上的列表。到目前为止,我的代码如下:
from selenium import webdriver as web
from selenium.webdriver.common.action_chains import ActionChains
driver = web.Chrome('driver path')
driver.get('http://fuelinsights.gasbuddy.com/Charts')
test= driver.find_elements_by_xpath('//*[@class="highcharts-markers"]')
print(test)
`
这给了我测试=[]。以前,我在所有的抓取项目中都使用了beautifulsoup,但我重做了一些以前的项目,以确保我了解Selenium 的工作原理并且没有遇到问题。
如果有人能帮我解决这个问题,我可以创建一个项目列表,我可以使用 ActionChains 将鼠标悬停在上面并从中提取价格和日期。
谢谢!
****编辑**** 为了澄清,我查看了许多其他关于 SVG 和 g 元素以及 Highcharts 的帖子,但我仍然缺乏解决这个问题的方法。我尝试了许多 Xpath(和其他 find_elements_by 选项),但只能得出两个结果:(1)Xpath 是有效的,但不包含任何元素,或者(2)InvalidSelectorException 表明我无法找到具有 xpath 表达式的元素。我相信这归结为简单地错误地指定了我的 Xpath,但我不知道如何找到正确的 Xpath。
【问题讨论】:
-
highcharts-markers类位于<g>标记内,而svg标记内。 Selenium WebDriver [Java]: How to Click on elements within an SVG using XPath 的可能重复项 -
感谢 DebanjanB,这提供了一些有用的见解。这些是非常相似的问题,但我无法使用链接中提供的建议解决方案来解决我的问题(诚然,这可能是由于我自己从 Java 转换为 Python 的缺点)。