Python 在Mac上使用Selenium WebDriver在Firefox中打开新选项卡

Python 在Mac上使用Selenium WebDriver在Firefox中打开新选项卡,python,macos,firefox,selenium,selenium-webdriver,Python,Macos,Firefox,Selenium,Selenium Webdriver,我刚刚安装了Selenium Web驱动程序并进行了试用。它工作得很好。我的用例可以描述如下: 在带有pseudo X server(Xvfb)的服务器上启动Firefox 新的Driver.Firefox()对象 打开10个选项卡,并在每个选项卡中加载一个网页 从所有加载的页面检索html 唯一不起作用的步骤是步骤3。我找不到如何打开新选项卡。我在这里发现了这一点:然而,为了调试目的,我在我的Mac电脑上本地测试了这一点(即使用可见显示),我发现Firefox浏览器(在创建驱动程序对象时打开)

我刚刚安装了Selenium Web驱动程序并进行了试用。它工作得很好。我的用例可以描述如下:

  • 在带有pseudo X server(Xvfb)的服务器上启动Firefox
  • 新的Driver.Firefox()对象
  • 打开10个选项卡,并在每个选项卡中加载一个网页
  • 从所有加载的页面检索html
  • 唯一不起作用的步骤是步骤3。我找不到如何打开新选项卡。我在这里发现了这一点:然而,为了调试目的,我在我的Mac电脑上本地测试了这一点(即使用可见显示),我发现Firefox浏览器(在创建驱动程序对象时打开)在按照SO线程中的描述操作时不会打开任何选项卡。所以我在这里试过:

    driver = webdriver.Firefox()
    driver.get("https://stackoverflow.com/")
    body = driver.find_element_by_tag_name("body")
    body.send_keys(Keys.CONTROL + 't')
    

    正如我所说,这对我不起作用。那么,如何才能打开选项卡呢?我使用Selenium 2.39(pip安装Selenium)和Python 2.7。

    在OSX上打开新选项卡的组合键是Command+T,因此您应该使用

    body.send_keys(Keys.COMMAND + 't') 
    

    在OSX上打开新选项卡的组合键是Command+T,因此您应该使用

    body.send_keys(Keys.COMMAND + 't') 
    

    通过动作链接将其发送到浏览器可能更为正确,因为您实际上并没有键入文本;这也使您的代码更具可读性

    from selenium.webdriver.common.action_chains import ActionChains
    from selenium.webdriver.common.keys import Keys
    
    # before correction from  DMfll:
    # ActionChains(driver).send_keys(Keys.COMMAND, "t").perform()
    
    # correct method
    ActionChains(driver).key_down(Keys.COMMAND).send_keys("t").key_up(Keys.COMMAND)‌​‌​.perform()
    

    通过动作链接将其发送到浏览器可能更为正确,因为您实际上并没有键入文本;这也使您的代码更具可读性

    from selenium.webdriver.common.action_chains import ActionChains
    from selenium.webdriver.common.keys import Keys
    
    # before correction from  DMfll:
    # ActionChains(driver).send_keys(Keys.COMMAND, "t").perform()
    
    # correct method
    ActionChains(driver).key_down(Keys.COMMAND).send_keys("t").key_up(Keys.COMMAND)‌​‌​.perform()
    

    是的,对。然而,有趣的是,这令人困惑:)。谢谢@图姆:说清楚一点,这很让人困惑,因为苹果做到了这一点,硒元素只是跟随它的存在。是的,对。然而,有趣的是,这令人困惑:)。谢谢@图姆:说清楚一点,这很让人困惑,因为是苹果公司制造的,Selenium只是遵循它。我没有从
    ActionChains(驱动程序)。send_keys(keys.COMMAND,“t”)。perform()
    中获得预期的行为。这给了我这里记录的预期行为:
    ActionChains(driver).key\u down(Keys.COMMAND).send\u Keys(“t”).key\u up(Keys.COMMAND)‌​.执行()
    。它包括一个向上键和一个向下键。我没有从
    操作链(驱动程序)中获得预期的行为。发送\u键(keys.COMMAND,“t”).perform()
    。这给了我这里记录的预期行为:
    ActionChains(driver).key\u down(Keys.COMMAND).send\u Keys(“t”).key\u up(Keys.COMMAND)‌​.执行()
    。它包括向上键和向下键。