2017-06-15 22 views
2

フレーム内にある特定の要素を選択するには、Selenium with Pythonを使用すると助けが必要です。私がしようとしているのは、 'id' = 'kiadvany_cim'という要素を選択することです。これはウィンドウ(パネル、フレーム、またはポップアップ)の中にあります。何を呼び出すべきか分かりません。問題)。私が使って試してみましたSeleniumをPythonでフレーム内のフィールドに切り替える方法

<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_window("editKiadvanyPanel")

driver.switch_to_frame("editKiadvanyForm")

driver.switch_to_window("editKiadvanyForm")

driver.switch_to_frame("editKiadvanyPanel")

が、それらのどれも私のために働いていません。私はちょうど私が

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

私はよく分からない取得

titleField = browser.find_element_by_id('kiadvany_cim') 

フレームなしの要素を探ししようとすると、私はselenium.common.exceptions.NoSuchFrameException: Message: no such frame

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

を取得しています何をすべきか私はhttp://selenium-python.readthedocs.io/navigating.html#filling-in-formsを見ましたが、ウィンドウ/フレームに切り替えるための提案の他に、私はかなり失われています。どんな助けもありがとう。ありがとうございました!

詳細をお知らせください。

答えて

1

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"))) 

か、それはあなたがしようとすることができ、同じid属性値を持つ2つの以上の要素がある場合にはprint(len(driver.find_elements_by_id("kiadvany_cim")))

id="kiadvany_cim"を有する唯一の要素ではありませんかどうかをチェックするようになるまで、あなたは待つ必要があるかもしれません正確な要素を扱うためにインデックスを使用してください。

driver.find_elements_by_id("kiadvany_cim")[1] 
+0

Oh my god、あなたを祝福してください。それは待っていたものだった。本当にありがとう、私はあまりにも長い間それを解決するために解決しようとしてきました。 – Oxymoronica

関連する問題