18

Python用のセレンを使用して、ブラウザで新しいタブまたは新しいウィンドウを開こうとしています。新しいタブまたは新しいウィンドウが開いているかどうかはほとんど重要ではなく、ブラウザの 2 番目のインスタンスが開かれていることだけが重要です。

私はすでにいくつかの異なる方法を試しましたが、成功したものはありません。

  1. 存在しないウィンドウに切り替えて、そのウィンドウが見つからない場合に新しいウィンドウを開くことを期待しています。

    driver.switch_to_window(None)

  2. 開いているウィンドウを反復処理する (ただし、現在は 1 つしかありません)

    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')
    

特にこれの問題は、次のような特定の要素にのみキーをブラウザに直接送信することができないように見えることでした:

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

6 に答える 6

24

こんなことをしたらどうですか

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." を要求しました。この回答は、すべてのユーザーのユースケースで考えられるすべての要件を網羅しているわけではありません。以下の他の回答は、特定のニーズに合う場合があります。

于 2013-06-26T16:44:12.353 に答える