Загрузка файлов CSV с использованием Selenium Python приводит к исключению ElementClickInterceptedException - PullRequest
0 голосов
/ 02 августа 2020

Я пытаюсь загрузить некоторые открытые правительственные данные, используя 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 рекомендуют использовать E C, но мой код появляется во всплывающем окне, поэтому я не знаю, как его там можно использовать.

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)

Что я здесь делаю не так? Я использую Google Chrome 84.

1 Ответ

0 голосов
/ 02 августа 2020

Это наихудшая практика в селене. Хотя можно начать загрузку, щелкнув ссылку в браузере под управлением Selenium, API не показывает ход загрузки, что делает его менее идеальным для тестирования загруженных файлов. Это связано с тем, что загрузка файлов не считается важным аспектом имитации взаимодействия пользователя с веб-платформой. Вместо этого найдите ссылку с помощью Selenium (и любых необходимых файлов cookie) и передайте ее в библиотеку HTTP-запросов, например libcurl.

...