当我使用 PyInstaller 将其转换为 .exe 时,我的 selenium 项目无法在无头模式下运行

问题描述 投票:0回答:1

我使用Python 3.9。这是我用来激活无头模式的代码:

c = Options()
c.headless = True
TRANSLATE_TO=''
driver = webdriver.Firefox(options=c)

当我运行 Visual Studio 的调试器或单击 .py 文件时,它会正常工作。当我将其转换为 .exe 时,它并没有打开,并且浏览器被打开(尽管程序的其余部分像正常一样运行)。

我应该注意,使用 pyInstaller 将文件转换为 .exe 效果并不好。当我尝试将 pyfile 转换为 .exe 时,它会引发递归错误。然后我必须在生成的 .spec 文件的开头添加这一行:

import sys ; sys.setrecursionlimit(sys.getrecursionlimit() * 5)

完成此操作后,我再次为 .spec 文件运行 pyInstaller,然后成功创建 .exe。 (我使用5.1 pyInstaller)

我不知道这是否相关,但使用 selenium 的代码不是来自我变成 .exe 的主文件,而是来自主导入和使用的另一个文件。

python selenium-webdriver firefox pyinstaller
1个回答
0
投票

试试这个:

import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options as ChromeOptions
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.firefox.options import Options as FirefoxOptions
from selenium.webdriver.firefox.service import Service as FirefoxService
from webdriver_manager.chrome import ChromeDriverManager
from webdriver_manager.firefox import GeckoDriverManager

def initialize_chrome_driver():
    options = ChromeOptions()
    set_common_options(options)
    service = ChromeService(ChromeDriverManager().install())
    return webdriver.Chrome(service=service, options=options)

def initialize_firefox_driver():
    options = FirefoxOptions()
    set_common_options(options)
    service = FirefoxService(GeckoDriverManager().install())
    return webdriver.Firefox(service=service, options=options)

def set_common_options(options):
    options.add_argument("--disable-infobars")
    options.add_argument("--disable-popup-blocking")
    options.add_argument("--no-sandbox")
    options.add_argument("--disable-dev-shm-usage")
    options.add_argument("--log-level=3")
    options.add_argument("--disable-gpu")
    options.add_argument("--disable-extensions")
    options.add_argument('--disable-features=PrivacySandboxSettings4')
    options.add_argument("--window-size=1280,720")
    options.add_argument("--headless")

# Example usage:
# driver = initialize_chrome_driver()
driver = initialize_firefox_driver()
driver.get('https://www.google.com/')
print(driver.title)
time.sleep(100)
driver.quit()

用于创建 exe:

pyinstaller --noconfirm --onefile --console --icon "ICON PATH"  "PY FILE PATH"
© www.soinside.com 2019 - 2024. All rights reserved.