如何使用Selenium WebDriver for python在浏览器上打开一个新窗口?

时间:2013-06-26 16:31:09

标签: python selenium selenium-webdriver window

我正在尝试使用selenium for python在浏览器中打开一个新选项卡或一个新窗口。如果打开一个新选项卡或新窗口,那么重要的是打开浏览器的第二个实例非常重要。

我已经尝试了几种不同的方法,但都没有成功。

  1. 切换到一个不存在的窗口,希望在找不到所述窗口时打开一个新窗口:

    driver.switch_to_window(None)

  2. 通过打开的窗口进行迭代(尽管目前只有一个)

    for handle in driver.window_handles:
        driver.switch_to_window(handle)
    
  3. 尝试模拟键盘按键

    from selenium.webdriver.common.keys import Keys
    driver.send_keys(Keys.CONTROL + 'T')
    
  4. 特别是这个问题是,似乎不能直接将密钥发送到浏览器,只能发送到这样的特定元素:

    driver.find_element_by_id('elementID').send_keys(Keys.CONTROL + 'T')
    

    但是,当将诸如此类的命令发送到元素时,它似乎什么都不做。我试图在页面上找到最顶层的HTML元素并将密钥发送到该元素,但是再次遇到了失败:

    driver.find_element_by_id('wrapper').send_keys(Keys.CONTROL + 'T')
    

    我在网上找到的另一个版本,并且无法验证其有效性或缺乏有效性,因为我不确定需要导入的类/模块

    act = ActionChains(driver)
    act.key_down(browserKeys.CONTROL)
    act.click("").perform()
    act.key_up(browserKeys.CONTROL)
    

    使用不同语法的东西非常相似(我不确定这些中的一个或两个是否是正确的语法)

    actions.key_down(Keys.CONTROL)
    element.send_keys('t')
    actions.key_up(Keys.CONTROL)
    

4 个答案:

答案 0 :(得分:17)

你做这样的事情

driver = webdriver.Firefox() #First FF window
second_driver = webdriver.Firefox() #The new window you wanted to open

根据您要与之交互的窗口,您可以相应地发送命令

print driver.title #to interact with the first driver
print second_driver.title #to interact with the second driver

对于所有失败的选民:


OP要求“it is only important that a second instance of the browser is opened.”。这个答案并不包含每个人和每个人的用例的所有可能要求。 以下其他答案可能符合您的特殊需求。

答案 1 :(得分:14)

您可以使用execute_script打开新窗口。

driver = webdriver.Firefox()
driver.get("https://linkedin.com")
# open new tab
driver.execute_script("window.open('https://twitter.com')")
print driver.current_window_handle

# Switch to new window
driver.switch_to.window(driver.window_handles[-1])
print " Twitter window should go to facebook "
print "New window ", driver.title
driver.get("http://facebook.com")
print "New window ", driver.title

# Switch to old window
driver.switch_to.window(driver.window_handles[0])
print " Linkedin should go to gmail "
print "Old window ", driver.title
driver.get("http://gmail.com")
print "Old window ", driver.title

# Again new window
driver.switch_to.window(driver.window_handles[1])
print " Facebook window should go to Google "
print "New window ", driver.title
driver.get("http://google.com")
print "New window ", driver.title

答案 2 :(得分:5)

我建议在Firefox上使用CTRL + N命令减少内存使用量,而不是创建新的浏览器实例。

import selenium.webdriver as webdriver
from selenium.webdriver.common.keys import Keys

browser = webdriver.Firefox()
body = browser.find_element_by_tag_name('body')
body.send_keys(Keys.CONTROL + 'n')

Dhiraj已经提到了切换和控制窗口的方法。

答案 3 :(得分:0)

app.use(function(req, res, next) {
    try {
        throw new Error('test error');
    } catch (err) {
        next(err);
    }   
})