【问题标题】:I've got InvalidArgumentException when i used switch_to.window by selenium / Python [duplicate]当我通过 selenium / Python 使用 switch_to.window 时出现 InvalidArgumentException [重复]
【发布时间】:2021-01-05 00:52:55
【问题描述】:

我看过很多关于如何使用 selenium switch_to.window 的示例脚本

这是一个关于我所学的示例脚本,根本不起作用:

    from selenium import webdriver
    from pprint import pprint
    
    browser = webdriver.Firefox()
    
    
    script="""
        myWindow = window.open("", "ChildWindow", "width=200,height=100");
    """
    browser.execute_script(script)
    
    wHandles = browser.window_handles
    pprint(wHandles)
    
    handle = wHandles[1]
    print(handle, type(handle))
    
    browser.switch_to.window(handle)

我收到了那个错误信息:

InvalidArgumentException:预期的“句柄”是一个字符串,得到 [对象未定义] 未定义

显然我厌倦了正常的网页,结果相同。

有人遇到同样的问题吗?

【问题讨论】:

  • 您的代码有多个打印语句。他们打印了什么?
  • 仅用于调试:)
  • 我正在提取正确的输出。
  • 这是由于 Firefox 80 的问题。
  • 在 Chrome 上工作。

标签: python selenium


【解决方案1】:

忘记了 webdriver chrome/firefox - 最好使用 webdriver_manager,它使用你的 python 版本管理最新的浏览器 更多关于 webdriver_manager 可以找到here

pip install webdriver_manager

这是完美的代码

from webdriver_manager.firefox import GeckoDriverManager
from selenium import webdriver

browser = webdriver.Firefox(executable_path=GeckoDriverManager().install())

script = """
        myWindow = window.open("", "ChildWindow", "width=200,height=100");
    """
browser.execute_script(script)

wHandles = browser.window_handles
print(wHandles)

handle = wHandles[1]
print(handle, type(handle))

browser.switch_to.window(handle)

browser.quit()

【讨论】:

  • 似乎是 stackovwrflow 使用了一个愚蠢的算法来解决我的问题,而您的解决方案才是真正的解决方案。谢谢你。我只能放弃一个向上的三角形。我正在尝试联系支持团队。
  • 尽可能接受,谢谢并欢迎
猜你喜欢
  • 2020-11-04
  • 1970-01-01
  • 1970-01-01
  • 2018-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多