我如何捕获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(使用try
和except 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