2016-05-07 118 views
7

Selenium WebDriver & Pythonを使用して、かなりの数のURLを別のタブで開きたいとします。Seleniumは新しいタブ(PythonとChrome)で新しいURLを開けません

私が間違って何が起こっているかわからない:

driver = webdriver.Chrome() 
driver.get(url1) 
time.sleep(5) 
driver.find_element_by_tag_name('body').send_keys(Keys.CONTROL+'t') 
url2 = 'https://www.google.com' 
driver.get(item2) 

私はチュートリアルを見て、このコードは私が望む何をすべきかのように、それは私には思えます。実際に何が起きるかは、ブラウザが開いてurl1が開きます。新しいタブが開きます。しかし url2は新しいタブの代わりに元のタブに読み込まれます(新しいタブはアクティブなように見えます)。

(私はChromeを使用しているため、Firefoxを使用してもURLをロードできないため、Firefoxは開きますがリクエストされたURLは取得できません。 )

新しいタブで新しいURLを開くために私のコードで変更できることはありますか?

ありがとうございました!

作業からCTRL /コマンド+ Tを防止ChromeDriverにはバグがあり

答えて

7

:あなたは何ができるか

は、回避策として、新しい内のリンクを開くことですが、タブをクリックしてに切り替え、switch_to.window()を使用して新しいウィンドウに切り替えます。作業サンプル:

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

driver = webdriver.Chrome() 
driver.get("https://www.google.com") 

# open a link in a new window 
actions = ActionChains(driver) 
about = driver.find_element_by_link_text('About') 
actions.key_down(Keys.CONTROL).click(about).key_up(Keys.CONTROL).perform() 

driver.switch_to.window(driver.window_handles[-1]) 
driver.get("https://stackoverflow.com") 

最後にdriver.get()は、新たに開いたタブで実行されます。

コード:元のタブに切り替え

driver.execute_script("window.open('http://google.com', 'new_window')") 

コード:

driver.switch_to_window(driver.window_handles[0]) 

は、現在のタイトルを確認するここで

+0

ありがとうございましたが、このバグは新しいタブをまったく開いていないCtrlキーのようです。私は新しいタブを開くことができますが、そのタブにURLをロードしません。私はあなたのコードを試しましたが、おそらくそれを正しく理解していません。 find_element_by_link行にエラーがありました(要素を見つけることができません)。私はhtmlページ(ページソース)を読み込んでいますが、違いがあるかどうかはわかりません。 – SamH123

+0

@ SamH123あなたの場合は、新しいタブを開いた後に 'driver.switch_to.window(driver.window_handles [-1])'を実行するだけです。 – alecxe

+0

ありがとう、それは働いています! – SamH123

8

は簡単な方法、プラットフォームに依存していますあなたが正しいページにいることを確認してください:

コード:他のすべてのために

driver.title 

、楽しい時を過します!

+0

私はChromeウェブドライブを使用していますが、実際には新しいタブで開きます。ありがとう – PossessWithin

5

新しいウィンドウを開く別の方法は、JavaScriptとウィンドウハンドラを使用してウィンドウを切り替える方法です。あなたはそれが新しいウィンドウのようになります。実行している間に、あなたのブラウザを見れば

driver = webdriver.Chrome() 

# Open a new window 
# This does not change focus to the new window for the driver. 
driver.execute_script("window.open('');") 

# Switch to the new window 
driver.switch_to.window(driver.window_handles[1]) 
driver.get("http://stackoverflow.com") 

# close the active tab 
driver.close() 

# Switch back to the first tab 
driver.switch_to.window(driver.window_handles[0]) 
driver.get("http://google.se") 

# Close the only tab, will also close the browser. 
driver.close() 

は、フォーカスを持っていますが、webdriverをする、それはしていません。視覚に惑わされてはいけません。また、それは.close()driver.current_window_handle

selenium.common.exceptions.NoSuchWindowException: 
    Message: no such window: target window already closed from unknown error: web view not found 
    (Session info: chrome=<Your version of chrome>) 
    (Driver info: chromedriver=<Your chrome driver version> (<string of numbers>),platform=<Your OS>) 

を設定し、あなたがその段階でドライバとものを行うしようとした場合、それはそのエラーがスローされますよう、あなたがタブを閉じると、新しいウィンドウハンドラを選択することを忘れないでください。

関連する問題