I am trying to scraping in this URL, dealing with a Download button and I am having a problem, as the last line gives a ElementClickInterceptedException
.
My actual goal is to download the CSV file.
The code:
from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By from selenium.common.exceptions import TimeoutException from selenium.webdriver.chrome.options import Options from ipykernel import kernelapp as app import time options = webdriver.ChromeOptions() driver_path = 'C:\Users\Idener\Downloads\chromedriver_win32\chromedriver.exe' driver = webdriver.Chrome(driver_path, options=options) url = "https://pubchem.ncbi.nlm.nih.gov/compound/2078" driver.get(url) wait = WebDriverWait(driver, 5) wait.until(EC.element_to_be_clickable((By.XPATH, '//*[@id="NIOSH-Toxicity-Data"]/div[1]/div/div/a'))).click() wait = WebDriverWait(driver, 10) wait.until(EC.element_to_be_clickable((By.XPATH, '//*[@id="Download"]'))).click()
Advertisement
Answer
- Element you trying to click in initially out of the visible viewpoint. So, you need first to scroll the page and only then to click on that element.
- By clicking the first element new tab is opened and the second element you want to click is there, on the second tab. So, you need to switch to the new tab to access that element.
- No need to define
wait = WebDriverWait(driver, 10)
second time.
The following code is working:
import time from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.chrome.options import Options from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC options = Options() options.add_argument("start-maximized") webdriver_service = Service('C:webdriverschromedriver.exe') driver = webdriver.Chrome(options=options, service=webdriver_service) wait = WebDriverWait(driver, 10) url = "https://pubchem.ncbi.nlm.nih.gov/compound/2078#section=Toxicity" driver.get(url) element = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "#NIOSH-Toxicity-Data a[title*='Open']"))) element.location_once_scrolled_into_view time.sleep(1) element.click() driver.switch_to.window(driver.window_handles[1]) wait.until(EC.element_to_be_clickable((By.ID, "Download"))).click()
It does not download the file, only opens the downloading dialog