Я пытаюсь упаковать сценарий main.py в исполняемый файл с помощью PyInstaller. Сценарий содержит веб-сканер, который использует Selenium с chromedriver.exe для перехода на веб-сайт и автоматической загрузки файлов (PDF) в определенный каталог с именем «Файлы», расположенный в том же каталоге, что и main.py. Для ясности вот скриншот ожидаемой файловой структуры.
Когда я запускаю main.py напрямую, все работает так, как ожидалось: загрузки идут в каталог «Файлы». Однако после упаковки с помощью PyInstaller с помощью следующей команды:
pyinstaller --onefile --add-data "chromedriver.exe;." --add-data "urls.txt;." main.py
и запустите полученный файл .exe (с chromedriver.exe и urls.txt, включенными в один и тот же каталог), Я столкнулся с проблемой: хотя .exe успешно запускает Chrome и загружает файлы, он больше не создает и не использует каталог «Файлы» в том же месте. Вместо этого загрузки сохраняются во временный каталог, например C:\Users\{username}\AppData\Local\Temp\_MEI78762\Files, который удаляется после выхода из программы, поэтому загруженные файлы становятся недоступны.< /p>
Ниже приведен код, который я использую для установки пути загрузки. Логика пытается определить базовый путь к исполняемому файлу, но это не работает должным образом:
# Determine the base path
if getattr(sys, 'frozen', False):
# If the application is run as a bundle, the PyInstaller bootloader
# extends the sys module by a flag frozen=True and sets the app
# path into variable _MEIPASS'.
base_path = sys._MEIPASS
else:
base_path = os.path.abspath(".")
# Create the Files directory if it doesn't exist
download_dir = os.path.join(base_path, "Files")
if not os.path.exists(download_dir):
os.makedirs(download_dir)
# Extract all URLS from urls.txt and store in a variable call urls
urls = []
with open("./test_urls.txt", "r") as file:
urls = file.readlines()
# Configure Chrome options to set the download directory and disable the download prompt
chrome_options = webdriver.ChromeOptions()
prefs = {
"download.default_directory": download_dir,
"download.prompt_for_download": False,
"directory_upgrade": True,
"safebrowsing.enabled": True,
"safebrowsing.disable_download_protection": True, # Disable download protection
"profile.default_content_setting_values.automatic_downloads": 1, # Allow automatic downloads
"profile.default_content_settings.popups": 0, # Disable popups
"profile.content_settings.exceptions.automatic_downloads.*.setting": 1 # Allow multiple downloads
}
Подробнее здесь: https://stackoverflow.com/questions/791 ... tputted-in
Файлы, загруженные с моего веб-сканера с помощью селена chromedriver, выводятся в неправильный каталог. ⇐ Python
Программы на Python
1731062371
Anonymous
Я пытаюсь упаковать сценарий main.py в исполняемый файл с помощью PyInstaller. Сценарий содержит веб-сканер, который использует Selenium с chromedriver.exe для перехода на веб-сайт и автоматической загрузки файлов (PDF) в определенный каталог с именем «Файлы», расположенный в том же каталоге, что и main.py. Для ясности вот скриншот ожидаемой файловой структуры.
Когда я запускаю main.py напрямую, все работает так, как ожидалось: загрузки идут в каталог «Файлы». Однако после упаковки с помощью PyInstaller с помощью следующей команды:
pyinstaller --onefile --add-data "chromedriver.exe;." --add-data "urls.txt;." main.py
и запустите полученный файл .exe (с chromedriver.exe и urls.txt, включенными в один и тот же каталог), Я столкнулся с проблемой: хотя .exe успешно запускает Chrome и загружает файлы, он больше не создает и не использует каталог «Файлы» в том же месте. Вместо этого загрузки сохраняются во временный каталог, например C:\Users\{username}\AppData\Local\Temp\_MEI78762\Files, который удаляется после выхода из программы, поэтому загруженные файлы становятся недоступны.< /p>
Ниже приведен код, который я использую для установки пути загрузки. Логика пытается определить базовый путь к исполняемому файлу, но это не работает должным образом:
# Determine the base path
if getattr(sys, 'frozen', False):
# If the application is run as a bundle, the PyInstaller bootloader
# extends the sys module by a flag frozen=True and sets the app
# path into variable _MEIPASS'.
base_path = sys._MEIPASS
else:
base_path = os.path.abspath(".")
# Create the Files directory if it doesn't exist
download_dir = os.path.join(base_path, "Files")
if not os.path.exists(download_dir):
os.makedirs(download_dir)
# Extract all URLS from urls.txt and store in a variable call urls
urls = []
with open("./test_urls.txt", "r") as file:
urls = file.readlines()
# Configure Chrome options to set the download directory and disable the download prompt
chrome_options = webdriver.ChromeOptions()
prefs = {
"download.default_directory": download_dir,
"download.prompt_for_download": False,
"directory_upgrade": True,
"safebrowsing.enabled": True,
"safebrowsing.disable_download_protection": True, # Disable download protection
"profile.default_content_setting_values.automatic_downloads": 1, # Allow automatic downloads
"profile.default_content_settings.popups": 0, # Disable popups
"profile.content_settings.exceptions.automatic_downloads.*.setting": 1 # Allow multiple downloads
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79169681/files-downloaded-from-my-web-crawler-using-selenium-chromedriver-is-outputted-in[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия