Как правильно написать программу, которая загружает файлы на один сайт?
Есть файлы в Windows, которые нужно периодически загружать на сайт, через Планировщик задач в Windows. Как автоматически загрузить их на сайт на языке Python? Был у меня скрипт на python. Вот кусочек этого кода:
import pandas as pd
import mysql.connector
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
from bs4 import BeautifulSoup
import os
import numpy
from datetime import datetime
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.ui import WebDriverWait
#from selenium.webdriver.support.wait import WebDriverWait
#from selenium.common.exceptions import NoSuchElementException, StaleElementReferenceException, TimeoutException
#from selenium.webdriver.chrome.options import Options
...
def importCes(files):
#7
home_directory = os.path.expanduser("~")
files = os.listdir()
for file in files:
if "resNok2g." in file:
print(file)
print("Готов импортировать данные resNok2g на сайт CES")
op = webdriver.ChromeOptions()
op.add_argument('headless')
#print("... loading")
browser = webdriver.Chrome(options=op)
#browser = webdriver.Chrome()
browser.get('http://'+ipNokia+'/CreateSite_web/login.php')
browser.maximize_window()
soup = BeautifulSoup(browser.page_source, "html.parser")
findUsername = browser.find_element(By.ID, "username")
findPasswd = browser.find_element(By.ID, "password")
findLogin = browser.find_element(By.CSS_SELECTOR, '.btn-primary')
findUsername.send_keys(userCes)
findPasswd.send_keys(passwdCes)
findLogin.click()
#print("... loading")
time.sleep(5)
findBsslink = browser.find_element(By.CSS_SELECTOR, 'a[href="BSS_nokia_table.php"]')
findBsslink.click()
time.sleep(5)
findTecnoklogylink = browser.find_element(By.CSS_SELECTOR, 'a[href="tables_nokia_2g/table_nokia_bss_2g/index.php"]')
findTecnoklogylink.click()
time.sleep(5)
print("test")
findImportlink = browser.find_element(By.CSS_SELECTOR, 'a[href="/CreateSite_web/import_nokia_2g/index_bss.php"]')
#findImportlink = WebDriverWait(browser, 60).until(
# expected_conditions.element_to_be_clickable((By.CSS_SELECTOR, "a.btn.btn-primary"))
#)
time.sleep(60)
#print("Warning! Error in findImportlink.click.")
findImportlink.click()
time.sleep(5)
#WebDriverWait(browser, 5).until(expected_conditions.alert_is_present(), 'There is not enough time to process the data.')
alert = browser.switch_to.alert
alert.accept()
time.sleep(5)
findInput = browser.find_element(By.XPATH, "//input[@type='file']")
findSubmit = browser.find_element(By.CSS_SELECTOR, '.btn-primary')
findInput.send_keys(os.path.expanduser("~") + "\\forCes\Temp\\resNok2g.csv")
findSubmit.click()
time.sleep(5)
browser.quit()
return files
listFiles=[]
listFiles = importCes(listFiles)
Такой код работает, если запустить пустую опцию browser = webdriver.Chrome(). А это значает, что запустится браузер. Мне этого не нужно. поэтому я добавил опцию browser = webdriver.Chrome(options=op).
Но с данной опцией код не работает. И если я в спящий режим компьютер оставлю, код не заработает. Выдаст мне ошибку:
Created TensorFlow Lite XNNPACK delegate for CPU. test Traceback (most recent call last): File "C:\Users\david\forCes\Temp\cesAdd_v7_1.py", line 1903, in <module>
listFiles = importCes(listFiles) File "C:\Users\david\forCes\Temp\cesAdd_v7_1.py", line 1787, in importCes
findImportlink.click() File "C:\Users\david\forCes\env\lib\site-packages\selenium\webdriver\remote\webelement.py", line 94, in click
self._execute(Command.CLICK_ELEMENT) File "C:\Users\david\forCes\env\lib\site-packages\selenium\webdriver\remote\webelement.py", line 395, in _execute
return self._parent.execute(command, params) File "C:\Users\david\forCes\env\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 384, in execute
self.error_handler.check_response(response) File "C:\Users\david\forCes\env\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 232, in check_response
raise exception_class(message, screen, stacktrace) selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element <a class="btn btn-primary" href="/CreateSite_web/import_nokia_2g/index_bss.php">...</a> is not clickable at point (252, 427). Other element would receive the click: <td>...</td> (Session info: chrome=137.0.7151.120) Stacktrace:
GetHandleVerifier [0x00007FF74160CF25+75717]
GetHandleVerifier [0x00007FF74160CF80+75808]
(No symbol) [0x00007FF7413D8F9A]
(No symbol) [0x00007FF741437439]
(No symbol) [0x00007FF741434DF2]
(No symbol) [0x00007FF741431EA1]
(No symbol) [0x00007FF741430DA1]
(No symbol) [0x00007FF741422394]
(No symbol) [0x00007FF74145737A]
(No symbol) [0x00007FF741421C46]
(No symbol) [0x00007FF741457590]
(No symbol) [0x00007FF74147F39C]
(No symbol) [0x00007FF741457153]
(No symbol) [0x00007FF741420421]
(No symbol) [0x00007FF7414211B3]
GetHandleVerifier [0x00007FF74190D6FD+3223453]
GetHandleVerifier [0x00007FF741907CA2+3200322]
GetHandleVerifier [0x00007FF741925AD3+3322739]
GetHandleVerifier [0x00007FF7416269FA+180890]
GetHandleVerifier [0x00007FF74162E0FF+211359]
GetHandleVerifier [0x00007FF741615274+109332]
GetHandleVerifier [0x00007FF741615422+109762]
GetHandleVerifier [0x00007FF7415FBA39+4825]
BaseThreadInitThunk [0x00007FFDBDB27374+20]
RtlUserThreadStart [0x00007FFDBF85CC91+33]
В связи с этим у меня вопрос, можно ли это как-то исправить? Может, есть какие-то другие методы, используя Python, Windows, планировщик задач? Может, я использую код некорректно и где нужно поправить? Я так полагаю, что проблема в коде где-то здесь:
print("test")
findImportlink = browser.find_element(By.CSS_SELECTOR, 'a[href="/CreateSite_web/import_nokia_2g/index_bss.php"]')
#findImportlink = WebDriverWait(browser, 60).until(
# expected_conditions.element_to_be_clickable((By.CSS_SELECTOR, "a.btn.btn-primary"))
#)
time.sleep(60)
#print("Warning! Error in findImportlink.click.")
findImportlink.click()
time.sleep(5)
#WebDriverWait(browser, 5).until(expected_conditions.alert_is_present(), 'There is not enough time to process the data.')
alert = browser.switch_to.alert
alert.accept()
time.sleep(5)
Как вы видите, я несколькими способами пытался решить проблему, ничего не помогло.