Можно ли получить файл из диалогового окна загрузки файла, введенного по URL-адресу?

#html #excel #selenium

#HTML #excel #селен

Вопрос:

Я хочу загрузить файл с помощью selenium, чтобы открыть диалоговое окно файла и ввести URL-адрес, который берется из html ** (timeZone.xlsx href=»https://connect.wdc.com/servlet/JiveServlet/download/467244-5-476725/timeZone.xlsx»>timeZone.xlsx)* * .Затем я нажимаю «Открыть». Но не знаю, почему имя загруженного файла изменяется на «Часовой пояс [1].xlsx», а размер больше, чем исходный, загруженный непосредственно с веб-сайта.А затем, когда я нажимаю, чтобы сохранить изменения, расширение файла меняется с .xlsx на .xlsx.zip .Следующий шаг — распаковать файл в файл .xlsx для открытия. затем Excel выдает мне сообщение об ошибке с надписью «Excel не может открыть имя файла «. xlsx’, потому что формат файла или расширение файла недопустимы. Убедитесь, что файл не поврежден и что расширение файла соответствует формату файла.» . я меняю расширение файла на «.xls», но все равно не работает .

Возможно ли получить файл из диалогового окна загрузки файла по URL? и кто-нибудь может объяснить, почему имя / размер / расширение файла изменены и не могут открыть файл? Я в замешательстве.Ваш ответ приветствуется.

 from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from webdriver_manager.chrome import ChromeDriverManager
import pyautogui
import time

driver = webdriver.Chrome(os.path.abspath(ChromeDriverManager().install()))    
url='https://xxxx'
driver.get(url)
driver.maximize_window()

# **( omitted some codes irrelevant to this topic)**
# **below is starting to attach file with URL**

attach= WebDriverWait(driver,20).until(lambda driver: driver.find_element_by_xpath('//span[@class="attachmentButton"]'))
attach.click()
time.sleep(3)

# **filepath is grabbed from html code .and i could get the downloaded file and open it by inputting url to broswer address bar using my network.**

filepath= 'https://connect.wdc.com/servlet/JiveServlet/download/467244-5-476725/timeZone.xlsx'
pyautogui.write(filepath,interval=0.25)
pyautogui.press('return')

# **then i get the "timeZone[1].xlsx" which is not same as the original one**
 

[введите URL] [1]: https://i.stack.imgur.com/v3Dn4.png
[2]: Левое вложение является оригинальным, другое прикреплено по ссылке.[результат]
[1]: https://i.stack.imgur.com/Wi710.png

Комментарии:

1. У меня возникли проблемы с вашим процессом здесь… чтобы ответить на главный вопрос, вам нужен локальный путь для загрузки файла. (сайт может реализовать способ извлечения файла с использованием URL-адреса, но он не будет использовать <input type=’file’ для этого …) Когда вы сохраняете «нажмите, чтобы сохранить изменения», я не уверен, что понятно, на что именно вы нажимаете. Можете ли вы отредактировать, чтобы включить конкретную процедуру, которая создает «zip»?

2. Спасибо за ваш комментарий. На самом деле я не нажимаю «Открыть», но pyautogui сделал это с помощью pyautogui.press(‘return’) . Он возвращает файл «timeZone [1].xlsx». Когда я вручную ввожу URL-адрес и нажимаю «Открыть». он по-прежнему выдает мне «Часовой пояс [1].xlsx». Я добавил несколько своих кодов, и, пожалуйста, посмотрите это. И что еще я должен прикрепить, чтобы вы лучше следили за моим процессом?

3. что возвращает файл «Часовой пояс …»? Что вы подразумеваете под «вводом URL-адреса»? Вы говорите о локальном пути к файлу там?

4. Я думаю, что сеть возвращает мне файл, потому что я могу загрузить файл с URL-адресом из адресной строки. Правильно ли я думаю? я не говорю о локальном пути к файлу, я говорю о сетевой ссылке (https: // ….), ввод URL означает, что я копирую исходный адрес ссылки на файл и вставляю его в имя файла диалогового окна загрузки файла. Пожалуйста, смотрите скриншот ниже i.stack.imgur.com/v3Dn4.png

5. не уверен, что именно означает «прикрепить» в этом контексте … но я полагаю, что возможно, что он получает весь веб-запрос, включая заголовки запроса. (это сообщило бы браузеру, что вы загружаете файл … и передаете mime-тип?) это, безусловно, приведет к повреждению файла.