javascript - 如何单击使用 selenium 的 javascript 生成的元素
问题描述
我正在尝试制作一个为我创建帐户的机器人,但我无法与需要发送我的凭据的元素进行交互。
我所知道的是,我试图与之交互的元素是在单击另一个按钮后在 javascript 中生成的。我找到了多个答案,但都是用 Node.js 以外的其他语言编写的。
我正在尝试在此元素上发送凭据:
<input type="text" name="pseudo" id="pseudo" placeholder="Mon pseudo légendaire" style="margin-bottom: 10px;" maxlength="10">
我试着用这个:
driver.findElement(By.xpath('//*[@id="pseudo"]')).sendKeys('CREDITENTIALS')
这给我返回了这个错误:Webdrivererror: element is not visible。
HTML 元素代码如下所示:
<input type="text" name="pseudo" id="pseudo" placeholder="Mon pseudo légendaire" style="margin-bottom: 10px;" maxlength="10">
问题不是我必须等到我试图与之交互的元素显示出来,因为它已经显示出来,问题是我想通过 xpath 单击与我的 findElement 匹配的第二个元素,因为我在尝试什么点击在 html 代码中存在 2 次,只有第二次是可交互的。
更新(来自评论)
此元素位于以下<div>
标记内:
<div id="modal_message_wrapper" class="block_scrollable_wrapper scrollbar-light yellow noise inscription">
解决方案
您可以构造一个独特的xpath组合id
,name
和placeholder
属性,如下所示:
driver.findElement(By.xpath("//input[@id='pseudo' and @name='pseudo' and @placeholder='Mon pseudo légendaire']")).sendKeys('CREDITENTIALS')
更新
正如您提到的,所需的元素在:
<div id="modal_message_wrapper" class="block_scrollable_wrapper scrollbar-light yellow noise inscription">
因此,您可以使用以下代码行:
driver.findElement(By.xpath("//div[@class='block_scrollable_wrapper scrollbar-light yellow noise inscription' and @id='modal_message_wrapper']//input[@id='pseudo' and @name='pseudo' and @placeholder='Mon pseudo légendaire']")).sendKeys('CREDITENTIALS')
注意:很明显该元素位于Modal Dialog Box中,因此在尝试向元素发送任何字符序列之前,您必须以WebDriverWait的形式引入一个服务员。<input>
推荐阅读
- python - scipy splrep 是否为 t 提供了错误的最后一个元素?
- python-3.x - 编辑文件中的特定字典
- javascript - ngb 下拉菜单 - 滚动到活动项目
- angular - 子应用程序延迟加载在单水疗中心的角度微前端内
- android - 不可点击的第二个列表视图。如何改变它
- ios - OSStatus 错误:[-25291] 没有可用的钥匙串。您可能需要重新启动计算机
- node.js - 如果提供了函数参数,则在 MongoDB 中应用过滤器
- python - 绝对导入包中的python ModuleNotFoundError错误?
- excel - 是否可以使用 VBA 在 Acrobat Reader 中编辑和检索表单字段值?
- vba - 根据内容设置表格单元格的颜色