将Selenium CSV下载到python variab

2024-03-28 13:47:01 发布

您现在位置:Python中文网/ 问答频道 /正文

当我运行下面的代码时,一个chrome窗口打开,页面加载,CSV文件下载到我的文档中。在

但是,我想将CSV文件下载到python列表中。在

当我试图打印初始下载时,它显示'None'和reading incsv.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

Tags: 文件csvinfromimportnonesupportdata
1条回答
网友
1楼 · 发布于 2024-03-28 13:47:01

如果您看一下该页面上的下载按钮,它是指向以下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;

在我的例子中,url如下所示:

"//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()函数
  • 自己创建下载url。在

您可以从selenium内部调用javascript,方法如下: driver.execute_script('SRT_stocFund.GetPara()')-然后构建字符串来创建下载链接,并检索它。在

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

相关问题 更多 >