将Selenium CSV下载到python变量中

时间:2019-03-29 01:29:58

标签: python selenium csv selenium-webdriver

运行以下代码时,会打开一个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

1 个答案:

答案 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&region=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()')-然后构建您的字符串以创建下载链接,并进行检索。

您浏览器的开发工具是您的朋友。