Это общий код, адаптированный из других примеров:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Firefox()
driver.get("http://www.google.com/")
#open tab
# ... take the code from the options below
# Load a page
driver.get('http://bings.com')
# Make the tests...
# close the tab
driver.quit()
возможными способами были:
+
на один элемент #open tab
driver.find_element_by_tag_name('body').send_keys(Keys.CONTROL + 't')
+
через цепочки действий ActionChains(driver).key_down(Keys.CONTROL).send_keys('t').key_up(Keys.CONTROL).perform()
driver.execute_script('''window.open("http://bings.com","_blank");''')
Для этого вам необходимо убедиться, что предпочтения browser.link.open_newwindow и browser.link.open_newwindow.restriction . Значения по умолчанию в последних версиях в порядке, иначе вам, возможно, понадобится: fp = webdriver.FirefoxProfile()
fp.set_preference("browser.link.open_newwindow", 3)
fp.set_preference("browser.link.open_newwindow.restriction", 2)
driver = webdriver.Firefox(browser_profile=fp)
проблема в том, что эти настройки заданы другими значениями и заморожены, по крайней мере, селеном 3.4.0. Когда вы используете профиль, чтобы установить их с привязкой java, появляется исключение и с привязкой python новые значения игнорируются. В Java есть способ установить эти настройки без указания объекта профиля при разговоре с geckodriver, но он пока еще не реализован в привязке python: FirefoxOptions options = new FirefoxOptions().setProfile(fp);
options.addPreference("browser.link.open_newwindow", 3);
options.addPreference("browser.link.open_newwindow.restriction", 2);
FirefoxDriver driver = new FirefoxDriver(options);
Третий вариант перестала работать для python в селене 3.4.0.
Первые два параметра также показались прекратить работу в селене 3.4.0. Они зависят от отправки ключевого события CTRL в элемент. На первый взгляд кажется, что это проблема ключа CTRL, но он терпит неудачу из-за новой функции многопроцесса Firefox . Может быть, эта новая архитектура навязывает новые способы сделать это или, может быть, является временной проблемой реализации. В любом случае мы можем отключить его с помощью:
fp = webdriver.FirefoxProfile()
fp.set_preference("browser.tabs.remote.autostart", False)
fp.set_preference("browser.tabs.remote.autostart.1", False)
fp.set_preference("browser.tabs.remote.autostart.2", False)
driver = webdriver.Firefox(browser_profile=fp)
... а затем вы можете успешно использовать первый способ.