解决PyInstaller打包selenium脚本时弹出driver终端窗口

解决PyInstaller打包selenium脚本时弹出driver终端窗口

  1. 找到service.py
    C:\Users\XXX\AppData\Roaming\Python\Python39\site-packages\selenium\webdriver\common\service.py
  2. 添加creationflags
    在第77行添加:
    creationflags=134217728
  3. 使用PyInstaller打包
    pyinstaller -F -w -i xxx.ico xxx.py
    在这里插入图片描述
    有的解决方法是修改 …/Lib/sit-packages/selenium/webdriver/common/service.py 里的 creationflags=134217728,但selenium 版本升级了,这种方法不行。因为其他人的python 和 selenium 版本跟我的不一样,导致不能照搬但思路可以参考。我的python 版本是Python 3.10.10 ,selenium 4.8.2
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
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 = 134217728
        self.creation_flags = 134217728

然后在新建driver 时 webdriver.Chrome 添加参数 service,把自定义的Service 类MyService(…) 传入 ,

		chrome_options = Options()
        chrome_options.add_argument('--headless')
        chrome_options.add_experimental_option("excludeSwitches", ['enable-logging'])
​
        driver = webdriver.Chrome(chrome_options=chrome_options,
                                  service=MyService(ChromeDriverManager().install()))

已经有博主通过实现自己的类让窗口不再弹出,借鉴他的思路,因为项目可以直接提供python环境,所以我选择了直接修改源码的代码实现。
在这里插入图片描述

# 在service.py的60行开始添加几行代码,修改启动参数

si = subprocess.STARTUPINFO()
si.dwFlags = subprocess.CREATE_NEW_CONSOLE | subprocess.STARTF_USESHOWWINDOW
si.wShowWindow = subprocess.SW_HIDE    
import subprocess

def launchWithoutConsole(command, args):

	"""Launches 'command' windowless and waits until finished"""
	startupinfo = subprocess.STARTUPINFO()
	startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
	return subprocess.Popen([command] + args, startupinfo=startupinfo).wait()

if __name__ == "__main__":

# test with "pythonw.exe"

launchWithoutConsole("d:\\bin\\gzip.exe", ["-d", "myfile.gz"])

解决无法删除chromdriver.exe的问题

问题描述
想要删除chromdriver.exe时,提示正在运行中,不可删除,可我们的浏览器已经关闭了呀
此时打开任务管理器就会发现后台还有很多个 chrom、chromedriver 在运行着
原来,每次使用 selenium后不会自动结束 chrome.exe 进程
解决

方法1:直接在任务管理器中一个一个关闭进程即可

方法2:通过python脚本自动关闭

import os
os.system('taskkill /im chromedriver.exe /F')
os.system('taskkill /im chrome.exe /F')
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值