无法使用Python和Selenium打开新的Firefox标签

时间:2019-03-14 01:10:57

标签: python python-3.x selenium selenium-webdriver

我有多个FireFox配置文件,我想打开一个配置文件,使用不同的URL打开几个选项卡,打开另一个使用URL的配置文件打开选项卡。 由于某种原因,send_keys似乎不起作用,但window.open起作用。 到目前为止,这是我的代码。

import os
import selenium
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
p1 = webdriver.FirefoxProfile(profile_directory="C:/Users/User/AppData/Roaming/Mozilla/Firefox/Profiles/4yopmm8r.py")
driver = webdriver.Firefox(firefox_profile=p1)
driver.get("https://www.reddit.com/")
time.sleep(5)
driver.find_element_by_tag_name('body').send_keys(Keys.CONTROL + "t")
driver.get("https://www.stackoverflow.com/")

它所做的只是打开reddit,等待5秒钟,然后打开stackoverflow。 我该如何解决?

3 个答案:

答案 0 :(得分:0)

尝试使用脚本而不是Ctrl + t键来打开新标签,然后使用switch_to_window函数来更改焦点。

from selenium import webdriver
import time

p1 = webdriver.FirefoxProfile(profile_directory="C:/Users/User/AppData/Roaming/Mozilla/Firefox/Profiles/4yopmm8r.py")
driver = webdriver.Firefox(firefox_profile=p1)
driver.get("https://www.reddit.com/")
time.sleep(5)
# Open a new window
# This does not change focus to the new window for the driver.
driver.execute_script("window.open('');")
time.sleep(3)
# Switch to the new window
driver.switch_to_window(driver.window_handles[-1])
driver.get("https://www.stackoverflow.com/")

或尝试使用原始代码,但使用send_keys(Keys.CONTROL + "T")(大写)代替send_keys(Keys.CONTROL + "t")

答案 1 :(得分:0)

如果CTRL + t不适用于您,请尝试以下操作:

INSERT INTO date_pub1 (tranche, assessmentid, date_published, datepub)
VALUES
('Tranche 26', '14010', '2019-03-08 00:00:00.000', '08 March 2019'),
('Tranche 26', '14009', '2019-03-08 00:00:00.000', '08 March 2019'),
('Tranche 26', '13648', '2019-03-08 00:00:00.000', '08 March 2019'),
('Tranche 26', '14026', '2019-03-08 00:00:00.000', '08 March 2019');

然后,如果您想切换回原始标签,

driver.get("https://www.reddit.com/")
windows_before  = driver.current_window_handle
driver.execute_script("window.open('https://www.stackoverflow.com/')")
WebDriverWait(driver, 10).until(EC.number_of_windows_to_be(2))
windows_after = driver.window_handles

答案 2 :(得分:0)

您可以使用execute_script打开标签。这是示例代码。

#navigate to reddit in base tab
driver.get("https://www.reddit.com/")
time.sleep(5) # actually you can wait for one of the element present status.
base_tab = driver.window_handles[0]

#open the new tab and navigate to SO
driver.execute_script("window.open('https://www.stackoverflow.com/')")
latest_tab = driver.window_handles[-1]

# use .swith_to.window to access the desired tab
driver.switch_to.window(base_tab)
driver.switch_to.window(latest_tab)

通过索引访问标签的其他方式使用driver.window_handles,这将为您提供窗口列表。现在,您可以按索引选择标签(以0开头)

# base tab
driver.switch_to.window(driver.window_handles[0])
# second tab
driver.switch_to.window(driver.window_handles[1])
# latest tab
driver.switch_to.window(driver.window_handles[-1])

在打开新选项卡之前,请确保第一个窗口已完全加载很重要,否则window_handles与您期望的顺序不匹配。因为window_handles仅在选项卡完全加载后才考虑它。