首页 > 解决方案 > 使用 Selenium Python 下载 CSV 文件导致 ElementClickInterceptedException

问题描述

我正在尝试使用 Python3 和 Selenium 下载一些开放的政府数据。我的代码工作正常,我可以下载文件,但下载几个文件后,代码停止,我收到以下错误: ElementClickInterceptedException: Message: element click intercepted: Element <div class="views-field views-field-field-short-name file-container csv">...</div> is not clickable at point (859, 530). Other element would receive the click: <div id="confirmation_popup" class="confirmation-pop-6749107">...</div> (Session info: chrome=84.0.4147.105)

这是我的代码。我是 Selenium 的新手。请帮助我在哪里做错了什么。SO上的一些答案建议使用EC,但我的代码在弹出窗口中,所以我不知道如何在那里使用它。

import time
from selenium import webdriver
PATH = "C:\Program Files (x86)\chromedriver.exe"
driver = webdriver.Chrome(PATH)
driver.maximize_window()

driver.get("https://data.gov.in/catalog/prison-statistics-2018?filters%5Bfield_catalog_reference%5D=6749015&format=json&offset=0&limit=82&sort%5Bcreated%5D=desc")

time.sleep(25)

print(driver.title)

time.sleep(10)
list_of_items = driver.find_elements_by_class_name("csv")

for item in list_of_items:
    item.click()
    time.sleep(5)
    driver.find_element_by_xpath("//label[contains(text(),'Non-commercial')]").click()
    driver.find_element_by_xpath("//label[contains(text(),'R&D')]").click()
    driver.find_element_by_xpath("//input[@id='edit-submit']").click()
    print("Item download successfully!")
    time.sleep(5)

我在这里做错了什么?我正在使用谷歌浏览器 84。

标签: pythonpython-3.xseleniumgoogle-chromeautomation

解决方案


这是硒中最糟糕的做法。虽然可以通过在 Selenium 控制下的浏览器中单击链接来开始下载,但 API 不会公开下载进度,因此对于测试下载的文件来说不太理想。这是因为下载文件不被认为是模拟用户与 Web 平台交互的重要方面。相反,使用 Selenium(和任何必需的 cookie)找到链接并将其传递给像 libcurl 这样的 HTTP 请求库。


推荐阅读