如何使用 selenium 单击 javascript 生成的元素
How to click on an element generated by javascript using selenium
我正在尝试制作一个机器人来为我创建帐户,但我无法与需要发送凭据的元素进行交互。
我所知道的是,我尝试与之交互的元素是在单击另一个按钮后在 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')
哪个 returns 我这个错误: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')
注意:很明显该元素在模态对话框中,所以你必须在表单中引入一个服务员WebDriverWait,然后再尝试将任何字符序列发送到 <input>
元素。
我正在尝试制作一个机器人来为我创建帐户,但我无法与需要发送凭据的元素进行交互。
我所知道的是,我尝试与之交互的元素是在单击另一个按钮后在 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')
哪个 returns 我这个错误: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')
注意:很明显该元素在模态对话框中,所以你必须在表单中引入一个服务员WebDriverWait,然后再尝试将任何字符序列发送到 <input>
元素。