Python selenium CTRL+C closes chromedriver



我如何捕获Ctrl C(键盘间断)而不会导致Chromedriver关闭。当我运行脚本时,它可以关闭Chromedriver。

driver = webdriver.Chrome()
try:
    while True:
        #do stuff with chromedriver
except KeyboardInterrupt:
    print "User pressed CTRL + C"
    #do other stuff with chromedriver

它确实在我的脚本中捕获了键盘,因此我的脚本仍在继续,但是Chromedriver也会收到并关闭自身。

编辑1:
当您通过CMD运行脚本或使用Pyinstaller冻结脚本并运行它(IOError: [Errno 4] Interrupted function call

时,这里的解决方案无效

编辑2:
我还尝试使脚本忽略ERRNO 4(使用tryexcept Exception),但仍具有相同的结果(Chromedriver关闭),因此简而言之,此解决方案根本无济于事。

考虑使用webdriver.Remote风味。此选项不会在解释器内部产生WebDriver的本地版本,该版本应该从Sigint Hassle中释放您。

在另一个外壳中启动web驱动器 - (ChromeDriver for Chrome,Firefox的Geckodriver等)记下听力端口。我将在此处使用默认值:9515用于Chromedriver,4444用于Geckodriver。

在您的Python脚本中:

chrome:

driver=webdriver.Remote("http://127.0.0.1:9515",desired_capabilities=webdriver.DesiredCapabilities.CHROME)

firerox:

driver=webdriver.Remote("http://127.0.0.1:4444",desired_capabilities=webdriver.DesiredCapabilities.FIREFOX)

我刚刚尝试了@krmit的答案,使用硒4.8.2,python 3.11和geckodriver尝试了我想要的东西(能够取消睡眠)。<<<<<<<<<<<<<<<<<<<<<<<<

    options=Options()
    # options.profile = FirefoxProfile()
    ps = signal.getsignal(signal.SIGINT)
    signal.signal(signal.SIGINT, signal.SIG_IGN)
    driver = webdriver.Firefox(service=FirefoxService(GeckoDriverManager().install()), options=options)
    signal.signal(signal.SIGINT, ps)

您也可以在启动驱动程序时禁用Sigint处理。喜欢:

import signal 
...
ps = signal.getsignal(signal.SIGINT) # backup signal handler 
signal.signal(signal.SIGINT, signal.SIG_IGN) # ignore signal temporarily
... = webdriver.Chrome(...) 
signal.signal(signal.SIGINT, ps) # restore original handler

相关内容

  • 没有找到相关文章

最新更新