python - 如何使用带有 Python 的 Selenium 切换到框架中的字段

标签 python html selenium

我需要帮助将 Selenium 与 Python 结合使用,以选择出现在框架内的特定元素。我想做的是选择窗口(或面板、框架或弹出窗口)内带有“id”=“kiadvany_cim”的元素……我不确定该怎么调用它,这是问题)。

<div id="editKiadvanyPanel_c" class="yui-panel-container focused" style="left: 444px; top: -20px; z-index: 10044; visibility: visible; opacity: 1;">
<div id="editKiadvanyPanel" class="yuiPanel e yui-module yui-overlay yui-panel" style="visibility: inherit; width: 1040px;">
<div id="editKiadvanyPanel_h" class="hd" style="cursor: move;"> Add book from .epub </div>
<div id="editKiadvanyPanelBd" class="bd">
<form id="editKiadvanyForm" class="noMargin form-horizontal" enctype="application/x-www-form-urlencoded" method="post" action="/books/edit/?type=edit">
<fieldset id="fieldset-editKiadvanyForm" class="noMargin form-horizontal">
<input id="kiadvany_id" class="defZero" name="id" value="0" type="hidden">
<input id="kiadvany_dt_row" class="defZero" name="dt_row" value="0" type="hidden">
<input id="kiadvany_table" name="table" value="dt" type="hidden">
<input id="kiadvany_kozremukodo" class="defEmptyString" name="kozremukodo" value="" type="hidden">
<input id="kiadvany_token" class="defEmptyString" name="token" value="" type="hidden">
<input id="kiadvany_upload_book_token" class="defEmptyString" name="upload_book_token" value="" type="hidden">
<input id="kiadvany_upload_cover_token" class="defEmptyString" name="upload_cover_token" value="" type="hidden">
<input id="kiadvany_ifi" class="defZero triggerChange" name="ifi" value="0" type="hidden">
<table class="bc">
<tbody>
<tr>
<td class="upload">
<td class="inputs pr-1">
<div class="form-group">
<div class="form-group noMarginBottom">
<div class="checkbox" style="margin: -8px auto 16px 2px;">
<div id="kozremukodoOuter" class="form-group m-b-1">
<div class="form-group">
<label class="required" for="kiadvany_cim">Title</label>
<input id="kiadvany_cim" class="triggerChange form-control vRequired vNotEmpty-T hasValidator" name="cim" value="" title="Title" placeholder="Title" data-label-text="Title" type="text">
</div>
<div class="form-group pullUp defHidden hide" style="display: none;">
<div class="form-group katC kat1C">
<div class="form-group pullUp defHidden katC kat2C" style="display: none;">
<div class="form-group pullUp defHidden katC kat3C" style="display: none;">
<div class="form-group" style="display: none;">
<div class="checkbox" style="">
<div class="form-group">
<div class="form-group pullUp defHidden" style="display: none;">
<div class="form-group">
<div class="form-group defHidden pullUp" style="display: none;">
<div class="form-group">
</td>
<td class="inputs">
</tr>
</tbody>
</table>
</fieldset>
</form>
<div class="alert alert-info alert-sm alert-noautoclose text-center mb-0">
</div>
<div class="ft clearfix">
</div>
</div>

我试过使用:

driver.switch_to_frame("editKiadvanyForm")

driver.switch_to_window("editKiadvanyForm")

driver.switch_to_frame("editKiadvanyPanel")

driver.switch_to_window("editKiadvanyPanel")

但没有一个对我有用。我收到 selenium.common.exceptions.NoSuchFrameException: Message: no such frame

selenium.common.exceptions.NoSuchFrameException: Message: no such window

当我试图只寻找没有框架的元素时

titleField = browser.find_element_by_id('kiadvany_cim')

我明白了

selenium.common.exceptions.ElementNotVisibleException: Message: element not visible

我不确定还能做什么。我看过http://selenium-python.readthedocs.io/navigating.html#filling-in-forms但除了他们关于切换到窗口/框架的建议之外,我很迷茫。任何帮助,将不胜感激。谢谢!

如果我需要提供更多详细信息,请告诉我。

最佳答案

该元素不太可能位于 iframe 或新窗口内。您可能需要等到它变得可见

from selenium.webdriver.support.ui import WebDriverWait as wait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

wait(driver, 10).until(EC.visibility_of_element_located((By.ID, "kiadvany_cim")))

或者使用 print(len(driver.find_elements_by_id("kiadvany_cim")))

检查它是否不是唯一具有 id="kiadvany_cim" 的元素

如果有两个或多个元素具有相同的 id 属性值,您可以尝试使用索引来处理正确的元素

driver.find_elements_by_id("kiadvany_cim")[1]

关于python - 如何使用带有 Python 的 Selenium 切换到框架中的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44575760/

相关文章:

html - 表 TD 未正确对齐

Javascript - 如何通过 CSS 更改触发 "if"条件

html - Bootstrap 4.1 列内的额外填充

python - Selenium 独特的 session

java - 使用 Selenium IDE 录制搜索功能

Python 版本无法在 Ubuntu 中找到模块

python - 用 Pandas 从一行中移动一列

java - 确保 TestNG 套件中的测试失败时测试继续执行

Python 请求超时无法正常工作

python - 从特定索引中重新选择 Pandas 数据框