当前位置: 首页 > 知识库问答 >
问题:

无法用Python和selenium打开新的Firefox标签[重复]

沈龙光
2023-03-14

我有多个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个答案

梁丘伟
2023-03-14

您可以使用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只有在完全加载选项卡后才会考虑它。

云德辉
2023-03-14

尝试使用脚本而不是 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/")

或者尝试使用您的原始代码,但使用< code>send_keys(Keys。CONTROL "T")(大写)而不是< code>send_keys(Keys。控制“t”)。

花和宜
2023-03-14

如果CTRL t对您不起作用,请尝试以下方法:

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

然后,如果要切换回原始选项卡,

new_window = [x for x in windows_after if x != windows_before][0]
driver.switch_to_window(new_window)
 类似资料:
  • 问题内容: 因此,我试图在WebDriver内的新选项卡上打开网站。我想这样做,因为使用PhantomJS为每个网站打开一个新的WebDriver大约需要3.5秒,所以我想提高速度… 我正在使用多进程python脚本,并且我想从每个页面中获取一些元素,因此工作流程如下: 但是我找不到任何方法来实现这一目标。 这是我正在使用的代码。网站之间永远都需要花时间,我需要它很快。允许使用其他工具,但是我不知

  • 问题内容: 我想使用Selenium WebDriver和Python在不同的选项卡中打开很多URL。 我不确定出了什么问题: 我查阅了教程,在我看来,这段代码应该可以实现我想要的功能。实际发生的情况是打开浏览器,打开url1,打开一个新标签, 但是 url2然后加载到原始标签中,而不是新标签中(即使新标签似乎是活动的)。 (我使用的是Chrome,因为使用Firefox时我根本无法加载任何URL

  • 问题内容: 我在Ubuntu Desktop 16.04上使用Selenium WebDriver,但无法打开浏览器。Firefox更新后出现以下错误(在此之前,所有方法都可以正常工作): 问题答案: 修正 :目前的解决方案是降级Firefox!运行此命令以获取可用Firefox版本的列表。 我的结果: 安装: 要保留此版本并禁止更新:

  • 我在Ubuntu桌面16.04上使用Selenium WebDriver,无法打开浏览器。在Firefox更新之后,我出现了以下错误(在此之前,一切都正常):

  • 我对包含Selenium的代码有一个问题:当我在新选项卡中打开一个链接时,程序不在新选项卡上工作,而是在旧选项卡上工作。我试图用CTRL选项卡更改选项卡,但这不起作用。然后我尝试了以下代码,我在另一个问题中发现:在新选项卡中打开链接并在选项卡之间切换(Selenium WebDRiver Python) 这也没用…有人知道吗? PS:我正在使用Python 3.8.3

  • 我正在尝试打开一个新选项卡,但前一个选项卡仍处于打开状态。我无法打开新选项卡。它一直在同一个选项卡中打开URL。我也尝试过使用Actions。