【问题标题】:How to close an internet tab with cmd/Python?如何使用 cmd/Python 关闭 Internet 选项卡?
【发布时间】:2015-03-21 19:06:08
【问题描述】:

所以我正在编写一个 Python 脚本来使用 cmd 打开互联网链接。例如:

import os
os.system('start http://stackoverflow.com/')
os.system('start http://www.google.com/')
os.system('start http://www.facebook.com/')

打开它们后我会这样做:

import time 
time.sleep(60)

所以我可以等一会再做其他事情。我似乎在任何地方都找不到是在打开这些选项卡 60 秒后关闭它们的方法?有没有可以用来关闭 cmd 中的 Internet 选项卡的命令?

注意:我使用的是 Windows 8Python 2.7.9Google Chrome

【问题讨论】:

    标签: python python-2.7 cmd


    【解决方案1】:

    您可以简单地使用键盘快捷键:

    import keyboard
    
    # here goes your code... 
    
    keyboard.press_and_release('ctrl+w') # closes the last tab
    

    这只会关闭最后一个选项卡,而不是全部(或从最后一个开始)

    【讨论】:

    • 因为这不是标准库的一部分,我猜它是keyboard
    • 是的,马克劳伦斯,我应该澄清一下。
    【解决方案2】:
    from selenium import webdriver  
    from selenium.webdriver.common.keys import Keys
    import time
    
    browser = webdriver.Firefox()
    browser.get('http://stackoverflow.com')
    main_window = browser.current_window_handle
    

    打开新标签

    browser.find_element_by_tag_name('body').send_keys(Keys.CONTROL + 't')
    browser.get('http://stackoverflow.com/questions/tagged/django')
    

    等待 10 秒,然后关闭新标签页。

    time.sleep(10)
    

    关闭新标签。第一个选项卡保持打开状态。

    browser.find_element_by_tag_name('body').send_keys(Keys.CONTROL + 'w')
    

    【讨论】:

      【解决方案3】:

      您可以启动进程,然后在 60 秒后终止它们。

      from subprocess import Popen, check_call
      
      p1 = Popen('start http://stackoverflow.com/')
      p2 = Popen('start http://www.google.com/')
      p3 = Popen('start http://www.facebook.com/')
      
      time.sleep(60)
      for pid in [p1.pid,p2.pid,p3.pid]:
          check_call(['taskkill', '/F', '/T', '/PID', str(pid)])
      

      replacing-os-system

      如果你想用三个标签打开浏览器然后关闭我会使用 selenium 或类似的东西:

      import time
      from selenium import webdriver
      
      
      dr = webdriver.Chrome()
      
      dr.get('http://stackoverflow.com/')
      dr.execute_script("$(window.open('http://www.google.com/'))")
      dr.execute_script("$(window.open('http://facebook.com/'))")
      
      time.sleep(5)
      dr.close()
      dr.switch_to.window(dr.window_handles[-1])
      dr.close()
      dr.switch_to.window(dr.window_handles[-1])
      dr.close()
      

      chromedriver, selenium

      【讨论】:

      • @logic,看起来在 Windows 上杀死进程并不简单,我将编辑
      • 瞌睡!再试试p1 = Popen('exec start http://www.facebook.com/',shell=True) 然后p1.kill()
      • 很确定是 shell=True 导致了问题,你安装了 psutil 吗?如果是这样试试pastebin.com/xkHakBkn,你也可以使用chrome.exe打开页面吗?
      • 当你使用 shell=True 时,所有被杀死的是实际的 shell。我会尝试安装psutil,你可以pip install psutil,出于兴趣 /c 命令会导致错误吗?
      • @逻辑。你试过psutil吗?您可以使用 win32api 开始该过程,但这涉及更多
      【解决方案4】:

      Chrome 拥有自己的进程和资源管理。 新chrome.exe <url> 的生命周期很短。一个新的chrome 进程进行通信并将新选项卡请求传递给另一个chrome 进程并立即退出。因此,新的chrome.exePID 是无关紧要的,杀死它不会关闭新打开的选项卡(如兄弟答案中所建议的那样)。

      但是,您可以使用这个 Naive 替代方案:

      1. 打开chrome.exe <url>
      2. 等待 60 秒
      3. 关闭所有chrome.exe进程

      例如:

      from subprocess import Popen
      import time
      
      urls = ['http://www.facebook.com/', 'http://www.google.com/']
      
      for url in urls:
          Popen(['start', 'chrome' , url], shell=True)
      
      time.sleep(60)
      
      Popen('taskkill /F /IM chrome.exe', shell=True)
      

      注意 - 它将关闭您的所有 chrome 实例

      【讨论】:

      • 对不起,我误解了你的第一条评论 :) 你是对的,它可以简化为一个字符串。刚刚编辑
      猜你喜欢
      • 2020-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-06
      • 1970-01-01
      • 1970-01-01
      • 2018-01-12
      相关资源
      最近更新 更多