首页 > 解决方案 > Python selenium 代码不适用于我的电脑上的选项

问题描述

我在 python (spyder 3.8) 中有一个带有 selenium 的webscraping代码,我需要点击一些 url 中的几个按钮来下载一些文件。我已经在 2 台不同的 pc 上尝试了我的代码,它运行良好,但是当我在我的办公室 pc 上运行它时它没有,我需要能够在那里运行它。问题是,当我在 chromedriver 上添加选项时,代码只是打开浏览器,但它什么也不做,它没有转到 url,过了一段时间它说错误“WebDriverException:未知错误:DevToolsActivePort 文件没有不存在”。如果我在没有任何选项的情况下运行它,它确实可以工作,但我需要包含它们。

我已经检查了 chrome 版本是否与驱动程序兼容,并尝试在没有任何选项的情况下运行代码,它确实有效。此外,如果我直接使用 driver.get 而不是 WebDriverGet,它似乎可以与选项一起使用,但我需要使用 WebDriverWait 来制作更稳定的代码,我真的不知道问题出在哪里:(。谢谢请注意!

import pandas as pd 
import zipfile
import os
import datetime 
import shutil
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import Select  
from selenium.webdriver.support.ui import WebDriverWait as W
from selenium.webdriver.support import expected_conditions as E 
from selenium.webdriver.common.by import By
import time
import win32com.client as win32
import re
import glob
from datetime import date, timedelta
from openpyxl import load_workbook #usar este en vez de pd para el loop
from dateutil.relativedelta import relativedelta
import win32com.client
from zipfile import ZipFile







driver_path = 'C:/Users/amoralesv/Desktop/dchrome/chromedriver'   

link_gener = "https://www.coordinador.cl/operacion/graficos/operacion-real/generacion-real-del-sistema/"
link_SIC = "https://www.coordinador.cl/mercados/graficos/costos-marginales/costo-marginal-real/"
link_inf_nov = "https://www.coordinador.cl/operacion/documentos/novedades-cdc/"
link_inf_abast = "https://www.coordinador.cl/operacion/documentos/estudios-de-la-programacion-de-la-operacion/programacion-mensual/"

chrome_options = Options()
chrome_options.add_argument('--disable-extensions--') 
chrome_options.add_argument("--headless")
chrome_options.add_experimental_option('prefs',  {
    "download.default_directory": "C:\\Users\\amoralesv\\Downloads",
    "download.prompt_for_download": False,
    "download.directory_upgrade": True,
    "plugins.always_open_pdf_externally": True}) #Hace que el pdf se descargue y no se abra en pestaña



driver = webdriver.Chrome(executable_path = driver_path, options = chrome_options) 

def descarga_generacion(mes, año, mes_pasado, año_pasado, driver):
    driver.implicitly_wait(30)
    driver.get(link_gener)
    wait = W(driver, 20)
    wait.until(E.element_to_be_clickable((By.ID, "tipo-xlsx"))).click()
    time.sleep(1)
    wait.until(E.element_to_be_clickable((By.ID, "tipo-xlsx"))).click()
    time.sleep(9)
    wait.until(E.element_to_be_clickable((By.ID, "datepicker777-9761_2"))).click()
    dropdown_month = Select(wait.until(E.visibility_of_element_located((By.CLASS_NAME, "ui-datepicker-month"))))
    time.sleep(1)
    dropdown_month.select_by_visible_text(mes)
    dropdown_year = Select(wait.until(E.visibility_of_element_located((By.CLASS_NAME, "ui-datepicker-year"))))
    time.sleep(1)
    dropdown_year.select_by_visible_text(año)
    time.sleep(1)
    wait.until(E.element_to_be_clickable((By.CSS_SELECTOR, "button[class*='ui-priority-primary']"))).click()
    time.sleep(1)
    download =  wait.until(E.element_to_be_clickable((By.CSS_SELECTOR, "a[class$='download-file-marginal']")))
    driver.execute_script("arguments[0].click();", download)
    time.sleep(5)
    wait.until(E.element_to_be_clickable((By.ID, "datepicker777-9761_2"))).click()
    dropdown_month = Select(wait.until(E.visibility_of_element_located((By.CLASS_NAME, "ui-datepicker-month"))))
    time.sleep(1)
    dropdown_month.select_by_visible_text(mes_pasado)
    dropdown_year = Select(wait.until(E.visibility_of_element_located((By.CLASS_NAME, "ui-datepicker-year"))))
    time.sleep(1)
    dropdown_year.select_by_visible_text(año_pasado)
    time.sleep(1)
    wait.until(E.element_to_be_clickable((By.CSS_SELECTOR, "button[class*='ui-priority-primary']"))).click()
    time.sleep(1)
    download =  wait.until(E.element_to_be_clickable((By.CSS_SELECTOR, "a[class$='download-file-marginal']")))
    driver.execute_script("arguments[0].click();", download)
    
    
    
def descarga_SIC_SING(nombre,nombre2, driver):
    driver.implicitly_wait(30)
    driver.get(link_SIC)
    wait = W(driver, 20)
    wait.until(E.element_to_be_clickable((By.ID, "datepicker22-9773"))).click()
    time.sleep(2)
    wait.until(E.element_to_be_clickable((By.CSS_SELECTOR, "button[class*='ui-priority-primary']"))).click()
    time.sleep(2)
    wait.until(E.visibility_of_element_located((By.CLASS_NAME, "barras-costos"))).click()
    dropdown_month = Select(wait.until(E.visibility_of_element_located((By.CLASS_NAME, "barras-costos"))))
    dropdown_month.select_by_visible_text(nombre)
    download =  wait.until(E.element_to_be_clickable((By.CSS_SELECTOR, "a[class$='download-file-costos']")))
    driver.execute_script("arguments[0].click();", download)   
    time.sleep(5)
    wait.until(E.element_to_be_clickable((By.ID, "datepicker22-9773"))).click()
    time.sleep(2)
    wait.until(E.element_to_be_clickable((By.CSS_SELECTOR, "button[class*='ui-priority-primary']"))).click()
    time.sleep(2)
    wait.until(E.visibility_of_element_located((By.CLASS_NAME, "barras-costos"))).click()
    dropdown_month = Select(wait.until(E.visibility_of_element_located((By.CLASS_NAME, "barras-costos"))))
    dropdown_month.select_by_visible_text(nombre2)
    download =  wait.until(E.element_to_be_clickable((By.CSS_SELECTOR, "a[class$='download-file-costos']")))
    driver.execute_script("arguments[0].click();", download)   ``` 

标签: pythonseleniumgoogle-chromeselenium-chromedriverspyder

解决方案


推荐阅读