如何用Selenium和Python下载CSV文件?解决点击报错问题
问题解决方案
一、修复点击按钮的报错
AttributeError: 'WebElement' object has no attribute 'clic'是拼写错误——Selenium中WebElement的点击方法是click(),你少打了末尾的字母k。
把代码最后一行改成:
revenues_download.click()
另外,建议加个显式等待,确保元素加载完成再点击,避免页面未加载完全导致的异常:
# 替换原来的查找和点击代码 revenues_download = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.CSS_SELECTOR, "body > header > div.container > div > div.col-lg-auto.pt-2.pt-xl-0.submenu > a:nth-child(1)")) ) revenues_download.click()
二、解决直接用get方法下载CSV的问题
直接调用链接出错,主要是Chrome默认下载设置的问题,或者会话凭证未同步。可以按下面的方法处理:
1. 配置Chrome自动下载
先设置Chrome的下载参数,指定保存路径并关闭下载提示:
from selenium.webdriver.chrome.options import Options # 替换成你要保存文件的路径 download_dir = r"C:/Users/Desktop/test/downloads" chrome_options = Options() chrome_options.add_experimental_option("prefs", { "download.default_directory": download_dir, "download.prompt_for_download": False, "download.directory_upgrade": True, "safebrowsing.enabled": True }) # 初始化driver时传入配置 driver = webdriver.Chrome(executable_path=r'C:/Users/Desktop/test/chromedriver.exe', options=chrome_options)
2. 调用下载链接
登录后直接获取按钮的href属性,用driver.get()访问:
# 获取下载链接 download_url = revenues_download.get_attribute("href") # 触发下载 driver.get(download_url)
如果还是不行,用requests配合Selenium的Cookie下载更稳定:
import requests # 把Selenium的Cookie转换成requests可用的格式 cookies = {c['name']: c['value'] for c in driver.get_cookies()} # 发起请求下载 resp = requests.get(download_url, cookies=cookies) # 保存文件 with open(f"{download_dir}/Revenues.csv", "wb") as f: f.write(resp.content)
额外的代码优化点
- 避免使用绝对XPATH(比如
/html/body/div[2]/div/div/form/p[1]/input),页面结构一旦变化就会失效,建议用相对定位,比如通过name属性找用户名输入框:driver.find_element(By.NAME, "username")(需对应实际HTML的name属性) - 你初始化driver的代码少了个右括号,修正:
driver = webdriver.Chrome(executable_path=r'C:/Users/Desktop/test/chromedriver.exe') # 补上最后的)
内容的提问来源于stack exchange,提问作者Felipe Escobar R
相关产品推荐
相关产品推荐

