我正在尝试点击网站上的元素。我不知道为什么我的脚本看不到该元素。我正在运行它,当我使用Python Shell并编写时:
z = browser.find_element_by_css_selector("input[name='0_40']")
我得到:
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"input[name='0_40']"}
我知道该元素存在是因为当我进入控制台并放置时:
$$("input[name='0_40']")
我得到:
[input#C0_40.textfield]
0
:
input#C0_40.textfield
length
:
1
__proto__
:
Array(0)
这是元素的网站位置(末尾的元素):
<html>
<body class="tebody" onload="javascript:CARO.caroInit();" onresize="javascript:CARO.onResize();">
<div id=”normMenu”>
<div id=”caroHolder” style=”top: 81px;”>
<div id="e1AppFrameContainer" class="caroLeft caroExpanded" tilesize="small" whichcaption="label_two_rows">
<div id="outerRCUX">
<div id="innerRCUX">
<iframe id="e1menuAppIframe" name="e1menuAppIframe" title="e1menuAppIframe" frameborder="0" width="100%" height="100%" src="/jde/Welcome.mafService?e1.state=maximized&e1.service=Welcome&E1CurrentWindowName=E1MENUMAIN_8595835811943006208&RENDER_MAFLET=E1Menu&e1.namespace=&namespace=&e1.mode=view">
<html>
<body>
<form style="margin: 0px 0px 0px 0px;" action="javascript:void(0);" id="E1PaneForm" name="P43070_W43070A" method="post">
<div id="e1formDiv" tabindex="-1" onscroll="FormDivScrollHandler.syncToolBar(true)" class="formdiv_noIE e1container" style="height: 570px; width: 768px;">
<table width="100%" id="FormAboveGridTable" border="0" cellspacing="0" cellpadding="0" style="width:100%; padding: 3px 0px 0px 3px;"><tbody><tr><td>
<tbody>
<tr>
<td>
<div style="position: relative; width: 744px; height: 367px;" id="FormAboveGrid" onkeydown="return FormKeyboardHandler.onContainerKeyDown(event,'0')" onmousedown="return true;" oncontextmenu="return FormKeyboardHandler.formExitContextMenu(event)">
<span id="outer0_45" style="position: absolute; left: 3px; top: 3px; width: 722px;" hasadjacentcontrols="true" shouldelongate="true">
<table class="GroupBox" cellspacing="0" cellpadding="0" border="1"><tbody><tr><td height="182" valign="TOP" class="ClearBorders">
<tbody>
<tr>
<td height="182" valign="TOP" class="ClearBorders">
<div style="position: relative; width: 722px; height: 182px;" id="div0_45" onkeydown="return FormKeyboardHandler.onContainerKeyDown(event,'0_45')" onmousedown="return true;" oncontextmenu="return FormKeyboardHandler.formExitContextMenu(event)">
<span id="outer0_40" style="position:absolute; left: 151px; top: 3px; width:135px; ">
<nobr>
<input class="textfield" type="text" name="0_40" title="Branch/Plant" maxlength="12" value="*" style="vertical-align: top; width: 118px; cursor: auto;" onhelp="hp('0_40')" onmouseover="updateHelpCursor('',this)" tabindex="7" id="C0_40" htmlpostflag="false" onfocus="FCHandler.onFocusVA(this,'',false)" onkeydown="FCHandler.onKeyDownTextField(this,'','3', event,false,'UTC')" onmousedown="FCHandler.onKeyDownTextField(this,'','3', event)" onblur="FCHandler.onExitVA(this,false,'',false)">
我怀疑脚本无法找到该元素,因为它是由JavaScript生成的,但是当我使用时:
browser.execute_script("arguments[0].click();",z);
我也不工作。 是否可以找到并单击此元素?我究竟做错了什么?非常感谢所有愿意花费时间解决此问题的人。
答案 0 :(得分:3)
如果元素是由JavaScript生成的,则并不意味着您只能使用execute_script()
来处理它。这意味着您可能需要一些时间才能执行JavaScript并在DOM中显示元素。
请注意,该元素位于iframe内,因此您需要在定位输入字段之前切换到iframe
尝试使用以下代码:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it("e1menuAppIframe"))
WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.NAME, "0_40"))).send_keys("text to send")