Python 在 selenium 中下载更新的源页面

Python download updated source page in selenium

我正在尝试使用以下代码从此 url https://coinmarketcap.com/historical/20210328/ 下载 html 内容:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

url = "https://coinmarketcap.com/historical/20210328/"
driver = webdriver.Firefox()
driver.get(url)
time.sleep(2)
driver.find_element_by_css_selector(".cmc-cookie-policy-banner__close").click()
time.sleep(2)
driver.find_element_by_css_selector(".cmc-table-listing__loadmore > button:nth-child(1)").click()
driver.find_element_by_css_selector(".cmc-table-listing__loadmore > button:nth-child(1)").click()
driver.find_element_by_css_selector(".cmc-table-listing__loadmore > button:nth-child(1)").click()
driver.find_element_by_css_selector(".cmc-table-listing__loadmore > button:nth-child(1)").click()
data = driver.page_source
print(data)

我使用点击功能按下页面底部的“加载更多”按钮,因为我不仅需要前 200 个元素,而且至少要达到 1000 个。 但是当我打印页面源代码时,它只显示了前200,好像它停在了页面第一次加载的html 内容,并且没有考虑我在页面上的操作。 我该如何解决这个问题?

在点击 'load more' 和在最后一次点击之后添加延迟之后获得 page_source 我看到点击 'load more' 确实改变了 [=12= 的内容]
下面的代码显示初始 page_source 长度为 396447,而最终 page_source 长度为 946180

import time

from selenium import webdriver

url = "https://coinmarketcap.com/historical/20210328/"
driver = webdriver.Chrome()
driver.maximize_window()
driver.get(url)
time.sleep(2)
driver.find_element_by_css_selector(".cmc-cookie-policy-banner__close").click()
time.sleep(2)
data = driver.page_source
print(len(data))
# print(data)
driver.find_element_by_css_selector(".cmc-table-listing__loadmore > button:nth-child(1)").click()
time.sleep(2)
driver.find_element_by_css_selector(".cmc-table-listing__loadmore > button:nth-child(1)").click()
time.sleep(2)
driver.find_element_by_css_selector(".cmc-table-listing__loadmore > button:nth-child(1)").click()
time.sleep(2)
driver.find_element_by_css_selector(".cmc-table-listing__loadmore > button:nth-child(1)").click()
time.sleep(2)
data = driver.page_source
print(len(data))
# print(data)
driver.quit()

必须改进此代码以删除冗余的硬编码休眠,但基本上它可以工作。

不是您问题的真正答案,但对您尝试翻录的网页的一些分析表明它直接从该端点提取数据:

https://web-api.coinmarketcap.com/v1/cryptocurrency/listings/historical?convert=USD,USD,BTC&date=2021-03-28&limit=200&start=401

这将 return JSON 然后您可以更轻松地将其导入 Python。

# import requests module
import requests
 
# Making a get request
response = requests.get('https://web-api.coinmarketcap.com/v1/cryptocurrency/listings/historical?convert=USD,USD,BTC&date=2021-03-28&limit=200&start=401')
 
# print response
print(response)
 
# print json content
print(response.json())