V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
cdwyd
V2EX  ›  问与答

Python Selenium 中的 driver 在处理了 KeyboardInterrupt 异常后无法退出

  •  
  •   cdwyd · 2017-08-26 20:03:57 +08:00 · 2626 次点击
    这是一个创建于 2635 天前的主题,其中的信息可能已经有所发展或是发生改变。

    代码如下,加上异常处理后就不能退出了,没有的话可以正常退出。网上没搜到相关的解释

    import time
    from selenium import webdriver
    
    driver = webdriver.Firefox()
    
    while True:
        try:
            print(time.time())
            time.sleep(1)
        except KeyboardInterrupt as e:
            break
    
    print('Stopping...')
    driver.quit()
    print('Stopped!')
    
    第 1 条附言  ·  2017-08-26 21:56:11 +08:00
    import time
    from selenium import webdriver
    
    driver = webdriver.Firefox()
    
    # while True:
    #     try:
    #         print(time.time())
    #         time.sleep(1)
    #     except KeyboardInterrupt as e:
    #         print('haha')
    #         break
    
    print('Quit after 3 seconds')
    time.sleep(3)
    
    print('Stopping...')
    driver.quit()
    print('Stopped!')
    

    上面的代码去掉了异常处理部分就可以正常退出。

    15 条回复    2017-08-27 09:53:28 +08:00
    cdwyd
        1
    cdwyd  
    OP
       2017-08-26 20:38:16 +08:00 via Android
    大佬们都去周末度假了?还是因为节点发的不对?
    arnofeng
        2
    arnofeng  
       2017-08-26 20:40:14 +08:00 via iPhone
    你代码逻辑写错了 逃
    jugelizi
        3
    jugelizi  
       2017-08-26 21:00:32 +08:00
    haha
    这代码谁教你写的
    jugelizi
        4
    jugelizi  
       2017-08-26 21:00:43 +08:00
    while True:
    cdwyd
        5
    cdwyd  
    OP
       2017-08-26 21:10:55 +08:00 via Android
    @arnofeng
    @jugelizi
    具体说下嘛
    aihimmel
        6
    aihimmel  
       2017-08-26 21:26:08 +08:00
    hhhhhh
    算了吧,谁都有菜鸟的时候,我说两句吧
    try-except 处理的 try 语句中的异常,而不是全局异常.
    看一下这个吧 http://www.runoob.com/python/python-exceptions.html

    简单的说就是
    try:
    #do something here
    pass()
    except:
    #do something here if error happened in "try"
    pass()
    cdwyd
        7
    cdwyd  
    OP
       2017-08-26 21:27:52 +08:00 via Android
    @aihimmel
    多谢,我去具体看看
    ipwx
        8
    ipwx  
       2017-08-26 21:29:36 +08:00
    楼上瞎喷什么…… 我没用过 selenium,但是这东西去掉 selenium 语义很正确啊?
    aihimmel
        9
    aihimmel  
       2017-08-26 21:34:05 +08:00
    @ipwx try 里的部分永远不会异常
    cdwyd
        10
    cdwyd  
    OP
       2017-08-26 21:52:40 +08:00
    @aihimmel
    KeyboardInterrupt 异常是可以捕获的,不过重点不在这里,而是为什么,加了这个异常处理后,driver 不能退出了
    cdwyd
        11
    cdwyd  
    OP
       2017-08-26 21:57:23 +08:00
    @arnofeng
    @jugelizi
    俩位,麻烦具体说下逻辑上的错误,谢谢
    aihimmel
        12
    aihimmel  
       2017-08-26 22:49:05 +08:00
    额,丢脸了,才发现是 KeyboardInterrupt 异常。。。。
    初步判断是 crtl+C 终止了 driver,所以不能退出
    cdwyd
        13
    cdwyd  
    OP
       2017-08-26 23:21:19 +08:00
    @aihimmel
    偶尔看错很正常,我也怀疑是 selenium 响应了 ctrl + c 没查到具体的资料,使用 psutil 强制进行清理了。
    ipwx
        14
    ipwx  
       2017-08-27 09:52:58 +08:00
    @aihimmel 它捕获的是 KeyboardInterrupt 诶大哥,Ctrl+C 就能触发,能不能好好看再来说?
    ipwx
        15
    ipwx  
       2017-08-27 09:53:28 +08:00
    @aihimmel time.sleep 阻塞阶段,如果 Ctrl+C,则会强制停止 sleep,并触发 KeyboardInterrupt。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1043 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 19:48 · PVG 03:48 · LAX 11:48 · JFK 14:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.