python - 无法切换到框架

标签 python selenium frames

在使用 Chromedriver 自动化页面时,我很难理解我遇到的问题。我在登录页面中,页面的 HTML 如下所示:

<frame name="mainFrame" src>
  <body>
    <table ..>
      <tr>
       <td ..>
        <input type="password" name="ui_pws">
       </td>
  ..
  ..
  ..
</frame>

这是要点,页面当然有多个表格、div 等... 我正在尝试使用 xpath//input[@name="ui_pws"] 在输入元素中输入密码。 但是没有找到该元素。

所以我认为这可能是因为错误的框架,我尝试了:

driver.switch_to_frame('mainFrame')

它因 NoSuchFrameException 而失败。 所以我切换到:

    main_frame = driver.find_element_by_xpath('//frame[@name="mainFrame"]')
    driver.switch_to_frame(main_frame)

然后为了交叉验证我得到了当前的框架元素:

    current_frame = driver.execute_script("return window.frameElement")

令我惊讶的是,打印出来时我得到了两个不同的元素。 现在我真的很困惑我应该做什么来切换框架或访问网页中的密码字段。从早上起我已经喝了 4 杯咖啡,但脑子还是冻僵了。

有人可以指导我吗?

最佳答案

你可以试试,这个在Java里应该和python里差不多

driver.switchTo().defaultContent();
WebElement frameElement = driver.findElement(By.xpath("//frame[@name='mainFrame']"));
drive.switchTo().frame(frameElement);

SwitchTo defaultContent 有助于正确聚焦,稍后我们可以切换到窗口中所需的框架。

关于python - 无法切换到框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20373580/

相关文章:

python - 从文件渲染变量

python - 使用 OpenCV 检测灰色事物

python - Web 服务器中的 Airflow Dag 状态不一致

python - Selenium 可以很好地检测弹出对话框,但无法处理它

php - 如何自动化浏览任务?

html - 如何防止使用 iframe 重新加载 Flash 播放器?

python - 按成员在类中的属性排序

javascript - 如何单击 Selenium Webdriver 中的所有元素?

c# - 如何制作一个弹出面板来加载网页,例如 .aspx 页面中的调查?

javascript - 在 JavaScript 游戏中使用 setInterval 代替 requestAnimationFrame