最近在使用tkinter来开发一个GUI程序,用到了selenium的headless模式。代码调试妥当,准备用pyinstaller打包成exe文件,却发现在pycharm里面一切正常,打包后会弹出一个黑框,影响体验:
有的同学还会有类似以下日志
DevTools listening on ws://127.0.0.1:12345...........
搜索一番之后大概发现了网上说的2种方案
- pyinstaller 使用 --windowed参数
- 修改.../Lib/sit-packages/selenium/webdriver/common/service.py的源码,将76行的creationflags改为一个神秘数字134217728(其实就是0x8000000)
长话短说,我本来就已经使用了-w参数编译,所以方法1不是我遇到的问题的原因,方法2才是。但是这么写比较粗鲁,更好的方法应该是写一个子类继承Service类(无奈selenium官方不提供修改该参数的公有方法)。
原来的写法(会弹窗)
from selenium.webdriver import ChromeOptions, Chrome
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
def initial_driver():
my_options = ChromeOptions()
my_options.add_argument('--headless')
my_options.add_experimental_option('excludeSwitches', ['enable-logging'])
return Chrome(options=my_options, service=Service(ChromeDriverManager().install()))
改为这样(不弹窗):文章来源:https://www.toymoban.com/news/detail-502839.html
from selenium.webdriver import ChromeOptions, Chrome
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
class MyService(Service):
def __init__(self, executable_path: str,
port: int = 0, service_args=None,
log_path: str = None, env: dict = None):
super(Service, self).__init__(
executable_path,
port,
service_args,
log_path,
env,
"Please see https://chromedriver.chromium.org/home")
self.creationflags = 0x8000000
def initial_driver():
my_options = ChromeOptions()
my_options.add_argument('--headless')
my_options.add_experimental_option('excludeSwitches', ['enable-logging'])
return Chrome(options=my_options, service=MyService(ChromeDriverManager().install()))
其中,下面这句的作用就是关闭“DevTools listening on ws://127.0.0.1:12345...........”的日志输出文章来源地址https://www.toymoban.com/news/detail-502839.html
my_options.add_experimental_option('excludeSwitches', ['enable-logging'])
到了这里,关于pyinstaller打包selenium后弹出webdriver命令行窗口的解决方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!