2016-09-01 11 views
1

私はPythonを使用しています。私は別のウェブサイトにそれぞれクロムで2つのタブを開こうとしています。これは私のコードです:私はそれを実行するとPython - セレンを使用して複数のタブを開く

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


browser=webdriver.Chrome() 
browser.get('http:/reddit.com') 
browser.find_element_by_tag_name('body').send_keys(Keys.CONTROL + 't') 
time.sleep(3) 
browser.get('http://bing.com') 

、最初のタブがreddit.comに開放され、その後、別のタブには、私のデフォルトのWebページに開き、その後、bing.com元のタブで開かれています。最初のタブをredditに、2番目のタブをbingにしたいが、 'browser.get(' website ')'は最初のタブでのみ動作する。

答えて

4

は、Pythonのため、このようにしてみてください:

browser=webdriver.Chrome() 
browser.get('http:/reddit.com') 
window_before = driver.window_handles[0] 
browser.find_element_by_tag_name('body').send_keys(Keys.CONTROL + 't') 
window_after = driver.window_handles[1] 
driver.switch_to_window(window_after) 
time.sleep(3) 
browser.get('http://bing.com') 
+0

ありがとうございます。それは今働きます! –

+0

嬉しい、私は助けることができてうれしい!これが最良の答えだと思われる場合は受け入れてください:) – Jason

+0

ハンドルが返される順序は任意です。したがって、第2のインデックスを使用して第2のウィンドウを返すべきではありません。 https://www.w3.org/TR/webdriver/#dfn-get-window-handles –

0

他のタブに切り替える必要があります。

ArrayList<String> tabs = new ArrayList<String> (driver.getWindowHandles()); 
driver.switchTo().window(tabs.get(0));//first tab 
driver.switchTo().window(tabs.get(1));//second tab 
+0

感謝を。私はそれを少しPythonのために変更し、それは動作します。 –

4

ウィンドウと対話するには、コンテキストをdriver.switch_to.windowでそのウィンドウに設定する必要があります。また、スクリプトインジェクションで新しいタブを開くために容易になるだろう:

browser=webdriver.Chrome() 

#first tab 
browser.get('http:/reddit.com') 

#second tab 
browser.execute_script("window.open('about:blank', 'tab2');") 
browser.switch_to.window("tab2") 
browser.get('http://bing.com') 
+0

私はスクリプト注入に慣れていません。 execute_script( "about:blank '、' tab2 ');")はどういう意味ですか? –

+0

引数として指定されたJavaScript文字列を実行します。この場合、 'tab2'という名前の新しいタブが開きます。詳細はhttps://developer.mozilla.org/en-US/docs/Web/API/Window/open –

関連する問題