<p>正如@joni所指出的,该站点在最初加载javascript之后运行javascript,用图形数据填充页面。下面的代码使用<a href="https://selenium-python.readthedocs.io/" rel="nofollow noreferrer">^{<cd1>}</a>加载页面,在图上抓取<code>2013-2014</code>的数据点元素,然后将鼠标悬停在每个点上,以便显示包含实际数据的信息工具提示:</p>
<pre><code>from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time
d = webdriver.Chrome('/path/to/chromedriver')
d.get('https://ski-resort-stats.com/Hemsedal/')
results = []
for i in d.execute_script('''return document.querySelectorAll('g > path[fill="#7cb5ec"]')''')[:-1]:
a = ActionChains(d)
a.move_to_element(i).perform()
time.sleep(0.3)
results.append(d.execute_script('''
function* get_hover_data(y_range){
for (var i of document.querySelectorAll('text[x="8"][data-z-index="1"][y="18"]')){
if (i.children.length === 5){
yield [i.children[0].textContent, i.children[3].textContent]
}
}
}
return [...get_hover_data('2013-2014')];
'''))
_, *final_results = [i[0] for i in results if i]
</code></pre>
<p>输出:</p>
<pre><code>[['45', '0'], ['46', '0'], ['47', '0'], ['48', '25'], ['49', '28'], ['50', '36'], ['51', '37'], ['52', '53,5'], ['1', '77,5'], ['2', '89,5'], ['3', '125,5'], ['4', '151,5'], ['5', '159,5'], ['6', '163,5'], ['7', '177,5'], ['8', '173,5'], ['9', '175'], ['10', '166'], ['11', '171'], ['12', '173,5'], ['13', '170'], ['14', '166'], ['15', '158,5']]
</code></pre>