硒隐藏 chromdriver 控制台窗口

时间:2021-04-05 12:37:50

标签: python selenium selenium-chromedriver pyinstaller

我使用 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 中执行此操作?

1 个答案:

答案 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 窗口没有出现!