我使用 python 创建了一个程序,其中使用了 selenium。我还使用 pyinstaller 创建了一个 .exe。如果我运行 .exe chrome 会正常打开。但由于某种原因,控制台也出现了。这仅在我启动 .exe 时发生。如果我在 VS Code 中启动代码,只会出现 chrome 窗口。
我发现了一些用 C# 编写的东西:
var driverService = ChromeDriverService.CreateDefaultService();
driverService.HideCommandPromptWindow = true;
var driver = new ChromeDriver(driverService, new ChromeOptions());
我的 chromdriver 设置:
option = webdriver.ChromeOptions()
option.add_argument("--incogneto")
chromedriver_path = driverPath
browser = webdriver.Chrome(chromedriver_path)
browser.set_window_size(1100, 800)
browser.get("myurl")
如何在 Python 中执行此操作?
答案 0 :(得分:1)
当您运行 pyinstaller 命令时,尝试将其链接到:pyinstaller ./main.py --onefile --noconsole --add-binary "chromedriver path;./driver"
--onefile
输出为一个.exe
。
--noconsole
执行创建的exe时不显示控制台。
--add-binary
指定要添加到exe的二进制文件。指定方法是"source_file_path; destination_file_path"
。在本例中,我们要添加 chromedriver 文件。
使用 --onefile
选项时,用 --add-binary
指定的二进制文件包含在 exe 中。它们在运行时扩展到一个临时文件夹。因此,使用在Python源相对路径可能不工作。
例如需要使用相对路径重写部分如下:
driver = webdriver.Chrome('./driver/chromedriver.exe')
改写如下:
import os
import sys
def resource_path(relative_path):
try:
base_path = sys._MEIPASS
except Exception:
base_path = os.path.dirname(__file__)
return os.path.join(base_path, relative_path)
driver = webdriver.Chrome(resource_path('./driver/chromedriver.exe'))
添加函数 resource_path
以使用它。
resource_path
获取路径与以下逻辑:
exe执行时,从sys._MEIPASS获取相对路径(exe执行时输入临时文件夹路径)
从 Python 执行时,从该文件(文件)获取相对路径。 现在无论您是从 Python 还是 exe 文件运行它都可以正常工作。
如果没有一个这样的作品,尝试这在代码:强>
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService # Similar thing for firefox also!
from subprocess import CREATE_NO_WINDOW # This flag will only be available in windows
chrome_service = ChromeService('chromedriver')
chrome_service.creationflags = CREATE_NO_WINDOW # We change the property in Service class, default was 0
driver = webdriver.Chrome(service=chrome_service)
以上代码仅适用于 selenium 版本 4.0.0
或更高版本。如果你没有这个版本,试试这个 pip 命令:pip install selenium=4.0.0a7
然后,程序运行了,但是 chromedriver 窗口没有出现!