运行以下代码时,会打开一个chrome窗口,加载页面,并将CSV文件下载到我的文档中。
但是,我想将CSV文件下载到python列表中。
当我尝试打印初始下载文件时,它显示为“无”,并且在csv.reader中读取时显示以下错误消息:
import csv
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
def getData()
driver = webdriver.Chrome()
driver.get(f"http://financials.morningstar.com/balance-sheet/bs.html?t=AAPL")
button = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CLASS_NAME, "rf_export")))
data = button.click()
print(data)
data = csv.reader(button)
for row in data:
print(row)
return data
getData()
-------------
None
Traceback (most recent call last):
File "helpers.py", line 403, in <module>
newData2("AAPL")
File "helpers.py", line 397, in newData2
data = csv.reader(button)
TypeError: argument 1 must be an iterator
答案 0 :(得分:1)
如果您查看该页面上的他的下载按钮,则它是指向以下javascript函数的链接:SRT_stocFund.Export()
查看此函数(在http://financials.morningstar.com/finan/static/script/SRT_stockFund.js处,它调用SRT_StockFund.GetPara()
,并使用返回的数据创建链接,并将浏览器的位置更改为该链接:
document.location = hostPath+"/ajax/ReportProcess4CSV.html?" + params+"&denominatorView="+denominatorView+"&number="+number;
在我的情况下,网址看起来像这样:
"//financials.morningstar.com/ajax/ReportProcess4CSV.html?&t=XNAS:AAPL®ion=usa&culture=en-US&cur=&reportType=bs&period=12&dataType=A&order=asc&columnYear=5&curYearPart=1st5year&rounding=3&view=raw&r=13805&denominatorView=raw&number=3"
您可以轻松地在硒中进行以下操作:
GetPara()
函数您可以从selenium中调用javascript,方法如下:
driver.execute_script('SRT_stocFund.GetPara()')
-然后构建您的字符串以创建下载链接,并进行检索。
您浏览器的开发工具是您的朋友。