gpt4 book ai didi

javascript - 如何访问特定的 Web 元素 Selenium Python

转载 作者:行者123 更新时间:2023-11-30 11:14:29 24 4
gpt4 key购买 nike

我试图点击网站上的一个元素。我不知道为什么我的脚本看不到该元素。我让它运行,当我使用 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&amp;e1.service=Welcome&amp;E1CurrentWindowName=E1MENUMAIN_8595835811943006208&amp;RENDER_MAFLET=E1Menu&amp;e1.namespace=&amp;namespace=&amp;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);

我也不工作。是否可以找到并单击该元素?我究竟做错了什么?非常感谢所有愿意花时间解决这个问题的人。

最佳答案

如果元素由 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")

关于javascript - 如何访问特定的 Web 元素 Selenium Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52206760/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com