Selenium未能下载excel,因为弹出了excel的保存窗口

2024-09-30 10:31:39 发布

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

由于弹出的保存窗口,我无法使用Selenium下载excel文件。有人能给我一些关于我写的代码的建议吗?我在网上尝试了很多代码来解决这个问题,但都没有成功。非常感谢你的帮助

这是一个python代码片段,用于从这些大型金融机构提取13F信息(资产持有头寸)。如果您想试用,我已经在代码片段中为您提供了帐户和密码

adjust_symbol = "Q4 2020.xlsx"

import selenium
from selenium import webdriver
import time 
import re
from selenium.webdriver.common.action_chains import ActionChains
from pathlib import Path
import time 
import pandas as pd
import numpy as np

pd.set_option('display.max_colwidth', -1)
pd.set_option('max_columns', None)
pd.set_option('display.max_rows', None)



url = ['https://whalewisdom.com/filer/bridgewater-associates-inc#tabholdings_tab_link',
       'https://whalewisdom.com/filer/soros-fund-management-llc#tabholdings_tab_link',
       'https://whalewisdom.com/filer/yacktman-asset-management-co-il#tabholdings_tab_link',
       'https://whalewisdom.com/filer/citadel-advisors-llc#tabholdings_tab_link',
       'https://whalewisdom.com/filer/third-point-llc#tabholdings_tab_link',
       'https://whalewisdom.com/filer/point72-asset-management-lp#tabholdings_tab_link',
       'https://whalewisdom.com/filer/tiger-management-llc-ny#tabholdings_tab_link',
       'https://whalewisdom.com/filer/fisher-asset-management-llc#tabholdings_tab_link',
       'https://whalewisdom.com/filer/greenwoods-asset-management-ltd#tabholdings_tab_link',
       'https://whalewisdom.com/filer/dorsey-asset-management-llc#tabholdings_tab_link',
       'https://whalewisdom.com/filer/hillhouse-capital-advisors-ltd#tabholdings_tab_link',
       'https://whalewisdom.com/filer/renaissance-technologies-llc#tabholdings_tab_link',
       'https://whalewisdom.com/filer/scion-asset-management-llc#tabholdings_tab_link',
       'https://whalewisdom.com/filer/duquesne-family-office-llc#tabholdings_tab_link',
       'https://whalewisdom.com/filer/appaloosa-management-lp#tabholdings_tab_link',
       'https://whalewisdom.com/filer/berkshire-hathaway-inc#tabholdings_tab_link',
       'https://whalewisdom.com/filer/perceptive-advisors-llc#tabholdings_tab_link',
       'https://whalewisdom.com/filer/greenlight-capital-inc#tabholdings_tab_link',
       'https://whalewisdom.com/filer/tiger-global-management-llc#tabholdings_tab_link',
       'https://whalewisdom.com/filer/baker-bros-advisors-llc#tabholdings_tab_link',
       'https://whalewisdom.com/filer/pointstate-capital-lp#tabholdings_tab_link',
       'https://whalewisdom.com/filer/pershing-square-capital-management-l-p#tabholdings_tab_link',
       'https://whalewisdom.com/filer/gotham-asset-management-llc#tabholdings_tab_link']

for i in url:
    try:
        
        driver = webdriver.Firefox()
        driver.get(i)
        time.sleep(1)
        #time.sleep(20)
        driver.find_element_by_id("lnk-login").click()
        time.sleep(1)
        driver.find_element_by_id("login").send_keys('martin.chow@ipartners.hk')
        time.sleep(1)
        driver.find_element_by_id("password").send_keys('ts262626')
        time.sleep(3)

        #If came across a class, use the following xpath to access that object
        driver.find_element_by_xpath('/html/body/section[1]/header/div/div/div[2]/div[2]/div/div/div/div/div[1]/div/div/div[4]/div/a[1]').click()
        time.sleep(3)
        #time.sleep(20)
        elem = driver.find_element_by_xpath('//*[@id="cmd-export-xlsx"]')

        actions = ActionChains(driver)
        actions.click(elem).perform()
        time.sleep(3)
        #time.sleep(20)
        
    except:
        driver = webdriver.Firefox()
        driver.get(i)
        time.sleep(1)
        #time.sleep(20)
        driver.find_element_by_id("lnk-login").click()
        time.sleep(1)
        driver.find_element_by_id("login").send_keys('martin.chow@ipartners.hk')
        time.sleep(1)
        driver.find_element_by_id("password").send_keys('ts262626')
        time.sleep(3)

        #If came across a class, use the following xpath to access that object
        driver.find_element_by_xpath('/html/body/section[1]/header/div/div/div[2]/div[2]/div/div/div/div/div[1]/div/div/div[4]/div/a[1]').click()
        time.sleep(3)
        #time.sleep(20)
        elem = driver.find_element_by_xpath('//*[@id="cmd-export-xlsx"]')

        actions = ActionChains(driver)
        actions.click(elem).perform()
        time.sleep(3)
        #time.sleep(20)

这是弹出的窗口,我无法阻止它,因为每次新的浏览器将形成,文件没有直接下载之前,我按下“确定”

example screenshot


Tags: httpsdivcomtimedriverlinksleepelement
1条回答
网友
1楼 · 发布于 2024-09-30 10:31:39

您可以执行以下操作以等待弹出窗口

    try:
        wait.until(EC.element_to_be_clickable((By.CLASS_NAME,"dfwid-close"))).click()
    except:
        print('No popup')
        continue

进口

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC

有点像在工作:

wait = WebDriverWait(driver, 5)

for i in url:
    try:
        time.sleep(5)
        driver.get(i)
        try:
            wait.until(EC.element_to_be_clickable((By.CLASS_NAME,"dfwid-close"))).click()
        except Exception as e:
            print(str(e))
            print('No popup')
        try:
            print('Trying to log in')
            wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,"#lnk-login"))).click()
            wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,"#login"))).send_keys('martin.chow@ipartners.hk')
            wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,"#password"))).send_keys('ts262626')
        except Exception as e:
            print(str(e))
            print('Failed log')
        try:
            print('Opening page')
            try:
                wait.until(EC.element_to_be_clickable((By.XPATH,"/html/body/section[1]/header/div/div/div[2]/div[2]/div/div/div/div/div[1]/div/div/div[4]/div/a[1]"))).click()
            except Exception as e:
                print(str(e))
            print('Attempting to download')
            wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,"#cmd-export-xlsx"))).click()
            
    except Exception as e:
        print(str(e))
        print('Failed download')
except Exception as e:
    print(str(e))
    pass

相关问题 更多 >

    热门问题