python - 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) ```
解决方案
推荐阅读
- swift - 图片资源和 NSImageView
- react-native - 当反应本机应用程序在后台时如何保持套接字打开?
- linux - 收集linux上所有连接的设备
- php - html表格中的按钮未对齐
- python - 如何删除有关使用 Word2vec gensim\matutils.py:737 的 gensim 警告
- macos - 将自定义文件添加到要使用 productbuild/pkgbuild 安装在特定路径上的软件包?
- macos - 分别使用 .fill 和 .blit 来解决这两个问题时,Python 会冻结和崩溃
- c++ - 在编辑控件中输入无效输入时如何显示不显眼的消息
- javascript - 哪种方式更适合将函数引用发送到反应组件?
- java - 无法将资源添加到 Maven 中的 jar