我在python脚本中使用硒与网页进行交互。的 脚本在Cygwin上运行。脚本看起来像这样:
browser = webdriver.Chrome()
def signal_handler(signum, frame):
browser.quit()
#close other things
sys.exit()
def browser_function():
#do something with browser
if __name__ == "__main__":
signal.signal(signal.SIGTERM, signal_handler)
signal.signal(signal.SIGINT, signal_handler)
browser_function()
browser.quit()
a)正常出口和b)中断出口在这里发生了两种不同的情况。在正常退出时,browser.quit()
可以正常工作,并关闭驱动程序(chromedriver.exe)和浏览器(chrome.exe)进程。但是,当它通过signal_handler()
退出时,仅驱动程序进程被关闭。我可以看到许多在cmd中运行的“ chrome.exe”进程。
如果我在browser.close()
内使用signal_handler()
(应该只关闭Chrome浏览器窗口),则会引发socket.error异常,说明socket.error: [Errno 104] Connection reset by peer
。因此,我假设Ctrl + C信号将重置与浏览器的套接字连接。
我想要的是防止这种连接重置的发生,以便我可以干净地退出浏览器。
我不想在cmd中使用taskkill /im "chrome.exe"
,因为它还会杀死用户打开的正在运行的浏览器会话。怎么做,
1)防止中断信号关闭套接字连接?或者,
2)查找由chromedriver(而不是用户)打开的“ chrome.exe”进程的pid?