【问题标题】:Ctrl + t - open new Tab doesn't work in Selenium + Firefox PythonCtrl + t - 在 Selenium + Firefox Python 中打开新标签不起作用
【发布时间】:2019-08-05 09:29:07
【问题描述】:

Selenium 是否取消了任何功能?

目标: 打开新标签,如“Ctrl + t”

环境:

  • 窗口 7
  • 火狐68
  • Python 3.7

以下两个脚本均无反应:

# 1 
dr.find_element_by_tag_name('body').send_keys(Keys.CONTROL + 't')
# 2 
ActionChains(dr).key_down(Keys.CONTROL).send_keys('t').key_up(Keys.CONTROL).perform()

3~4 年前的一些教程视频显示了以下脚本有效,但在我的情况下无效

【问题讨论】:

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


    【解决方案1】:

    您可以通过以下方式打开新标签:

    • SendKey 方法

      Mac 操作系统

      dr.find_element_by_tag_name('body').send_keys(Keys.COMMAND + 't')

      其他操作系统

      dr.find_element_by_tag_name('body').send_keys(Keys.CONTROL + 't')

    • 动作方法

      ActionChains(dr).key_down(Keys.CONTROL).send_keys('t').key_up(Keys.CONTROL).perform()

    • ExecuteScript 方法

      dr.execute_script("window.open('','_blank');")

      或带有特定的网址

      dr.execute_script("window.open('URL');")

    --更新--

    如果您的问题是要切换到特定选项卡,请执行以下操作:

    在执行您的操作之前,使用以下命令处理您当前的标签:

    first_tab = dr.window_handles[0]
    

    然后执行您的操作,这将带来一个新标签。 5 月 .click 行动。

    添加一些睡眠等待加载新标签dr.implicitly_wait(....)

    处理新标签窗口:

    second_tab = dr.window_handles[1]
    

    现在你可以切换到你想要的标签:

    dr.switch_to.window(first_tab / second_tab)
    

    希望这会有所帮助。

    【讨论】:

    • 使用 windows dr.execute_script("window.open('URL');") 工作。
    • 但它不在同一个窗口中。我只需要“打开新标签”,因为我需要检查下载进度,参考窗口正在执行的当前任务。 fp.set_preference("browser.tabs.remote.autostart", True) fp.set_preference("browser.tabs.remote.autostart.1", True) fp.set_preference("browser.tabs.remote.autostart.2", True) 或全部 False 为好。还是没有反应。
    • Kandan Siva ActionChains(dr).key_down(Keys.CONTROL).send_keys('t').key_up(Keys.CONTROL).perform() 或 dr.find_element_by_tag_name('body').send_keys (Keys.CONTROL + 't') 对你有用吗? (在同一窗口中打开标签,而不是在新窗口中)
    • @rane 当前任务将您带到一个新标签?你想去标签吗?如果它是真的,你只是交换它。我已经更新了代码,请尝试。
    • 比你弗里安,我在开始浏览 google.com 后停留在“打开新标签”,更不用说切换标签了。如果当前代码适用于您的 PC,我必须在另一台 PC 上尝试才能更接近真正的问题。
    【解决方案2】:

    问题是新的壁虎驱动(木偶),有两个上下文:

    1) Chrome(浏览器本身)

    2) 内容(网页内容)

    您需要告诉 selenium 您要在哪个上下文中发送操作。

    对我来说(Python 3.6、Selenium 3.141、gecko 驱动程序 0.26.0、firefox 75)此代码有效:

    driver.execute("SET_CONTEXT", {"context": "chrome"})
        urlbar=driver.find_element('id','urlbar')
        urlbar.send_keys(Keys.CONTROL, "t")
    driver.execute("SET_CONTEXT", {"context": "content"})
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-24
      • 2023-03-19
      • 2014-03-13
      • 1970-01-01
      相关资源
      最近更新 更多