首页 文章

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

提问于
浏览
10

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

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

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

driver.switch_to_window(None)

  • 通过打开的窗口进行迭代(尽管目前只有一个)
for handle in driver.window_handles:
    driver.switch_to_window(handle)
  • 尝试模拟键盘按键
from selenium.webdriver.common.keys import Keys
driver.send_keys(Keys.CONTROL + 'T')

特别是这个问题是,似乎不能直接将密钥发送到浏览器,只能发送到这样的特定元素:

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)

3 回答

  • 4

    你做这样的事情怎么样

    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
    

    For all down voters:


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

  • 13

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

    driver = webdriver.Firefox()
    driver.get("https://linkedin.com")
    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
    
  • 12

    我建议在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已经提到了切换和控制窗口的方法 .

相关问题