最近在使用tkinter來開發(fā)一個(gè)GUI程序,用到了selenium的headless模式。代碼調(diào)試妥當(dāng),準(zhǔn)備用pyinstaller打包成exe文件,卻發(fā)現(xiàn)在pycharm里面一切正常,打包后會(huì)彈出一個(gè)黑框,影響體驗(yàn):
有的同學(xué)還會(huì)有類似以下日志
DevTools listening on ws://127.0.0.1:12345...........
搜索一番之后大概發(fā)現(xiàn)了網(wǎng)上說的2種方案
- pyinstaller?使用?--windowed參數(shù)
- 修改.../Lib/sit-packages/selenium/webdriver/common/service.py的源碼,將76行的creationflags改為一個(gè)神秘?cái)?shù)字134217728(其實(shí)就是0x8000000)
長話短說,我本來就已經(jīng)使用了-w參數(shù)編譯,所以方法1不是我遇到的問題的原因,方法2才是。但是這么寫比較粗魯,更好的方法應(yīng)該是寫一個(gè)子類繼承Service類(無奈selenium官方不提供修改該參數(shù)的公有方法)。
原來的寫法(會(huì)彈窗)
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()))
改為這樣(不彈窗):文章來源:http://www.zghlxwxcb.cn/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()))
其中,下面這句的作用就是關(guān)閉“DevTools listening on ws://127.0.0.1:12345...........”的日志輸出文章來源地址http://www.zghlxwxcb.cn/news/detail-502839.html
my_options.add_experimental_option('excludeSwitches', ['enable-logging'])
到了這里,關(guān)于pyinstaller打包selenium后彈出webdriver命令行窗口的解決方法的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!