WebDriver' 对象没有属性 'switch_to_frame'

WebDriver' object has no attribute 'switch_to_frame'

我无法切换到成功识别的 iFrame。该脚本识别 iFrame(已在调试器中检查),但切换到 iFrame 失败并进入异常陷阱。几次之前它运行良好。

Message='WebDriver' object has no attribute 'switch_to_frame'

这期间发生了什么?

Chromedriver 已从版本 95.0.4638.17 更新到 ChromeDriver 96.0.4664.45

Chromedriver 是否不再兼容最新的 Selenium 版本?

... 
driver.switch_to.default_content()

try:
    # find the frame
    wait.until(EC.element_to_be_clickable((By.ID, "wysiwygTextarea_ifr")))
    frame2 = driver.find_element(By.XPATH, "//iframe[@id='wysiwygTextarea_ifr']");
    
    # switch to frame
    driver.switch_to.frame(frame2.tag_name);

    print("--------------iframe found-------------------"); 
except:
    print("--------------iframe not found-------------------");

...

切换到时,支持的表示法是:

  • 切换到使用框架名称的框架:

    driver.switch_to.frame('frame_name')
    
  • 切换到使用帧索引的帧:

    driver.switch_to.frame(1)
    
  • 切换到使用框架元素的框架:

    driver.switch_to.frame(driver.find_elements_by_tag_name("iframe")[0])
    
    • 切换到父框架:

      driver.switch_to.parent_frame()

  • 切换到默认内容:

    driver.switch_to.default_content()
    

这个用例

要切换您使用过的框架:

driver.switch_to.frame(frame2.tag_name);

即不支持的TAG_NAME。因此您会看到错误:

Message='WebDriver' object has no attribute 'switch_to_frame'

解决方案

您可以使用下面这行代码:

# find the frame
wait.until(EC.element_to_be_clickable((By.ID, "wysiwygTextarea_ifr")))
frame2 = driver.find_element(By.XPATH, "//iframe[@id='wysiwygTextarea_ifr']");
    
# switch to frame by frame element
driver.switch_to.frame(frame2);