python - 使用 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。
解决方案
这是硒中最糟糕的做法。虽然可以通过在 Selenium 控制下的浏览器中单击链接来开始下载,但 API 不会公开下载进度,因此对于测试下载的文件来说不太理想。这是因为下载文件不被认为是模拟用户与 Web 平台交互的重要方面。相反,使用 Selenium(和任何必需的 cookie)找到链接并将其传递给像 libcurl 这样的 HTTP 请求库。
推荐阅读
- jenkins - Rundeck 登录 Jenkins 控制台
- amazon-web-services - 首次请求时限制 Amazon PA API 请求
- python - Python Google Vision API 页数
- node-redis - “enable_offline_queue 与 retry_unfulfilled_commands”之间的区别
- java - 如何读取带有数组的 json 文件,如何修改我的代码以读取具有结果和 HD 的 json
- devstack - 在覆盖 lms-main-v1.css 时,更改会在重新编译 lms 中的主题时得到反映?
- sql-server - 查找最大同时出现次数,如果满足条件则增加变量
- html - 菜单元素的响应行为(在移动设备上不显示名称“菜单”,仅显示图标)
- unity3d - 如何在 Unity3D 中的 AssetBundle 上加载预制件的脚本组件?
- java - 表示属性文件 java 中的对象数组