我需要帮助将 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/