【问题标题】:Populate Verification Number using Selenium Python使用 Selenium Python 填充验证号
【发布时间】:2021-07-01 19:07:42
【问题描述】:

我正在尝试将电子邮件验证号填充到网页。假设我将六位数字作为字符串,有没有办法在 python 中使用 selenium 填充它?

这里是链接: https://testnet.phemex.com/login

以下是html

<div>
   <div class="wrap svelte-1ysrabk">
      <div class="digits svelte-1ysrabk">
         <div class="digit-box svelte-1ysrabk active"><span class="txt svelte-1ysrabk">1</span> <input type="number" maxlength="1" max="9" data-index="0" class="svelte-1ysrabk"></div>
         <div class="digit-box svelte-1ysrabk"><span class="txt svelte-1ysrabk">1</span> <input type="number" maxlength="1" max="9" data-index="1" class="svelte-1ysrabk"></div>
         <div class="digit-box svelte-1ysrabk"><span class="txt svelte-1ysrabk"></span> <input type="number" maxlength="1" max="9" data-index="2" class="svelte-1ysrabk"></div>
         <div class="digit-box svelte-1ysrabk"><span class="txt svelte-1ysrabk"></span> <input type="number" maxlength="1" max="9" data-index="3" class="svelte-1ysrabk"></div>
         <div class="digit-box svelte-1ysrabk"><span class="txt svelte-1ysrabk"></span> <input type="number" maxlength="1" max="9" data-index="4" class="svelte-1ysrabk"></div>
         <div class="digit-box svelte-1ysrabk"><span class="txt svelte-1ysrabk"></span> <input type="number" maxlength="1" max="9" data-index="5" class="svelte-1ysrabk"></div>
      </div>
      <div class="explain svelte-1ysrabk"></div>
   </div>
</div>

要查看该字段,请执行以下步骤:

  1. 转到https://testnet.phemex.com/
  2. 点击登录
  3. 在下一个字段中单击“重置密码”
  4. 输入您的电子邮件
  5. 点击“继续”

有六个具有不同数据索引的数字框,我不确定如何填充它们。感谢您提供任何潜在的帮助!

【问题讨论】:

  • 添加步骤以查看该字段
  • 我为你添加了步骤。

标签: python html selenium selenium-webdriver selenium-chromedriver


【解决方案1】:
digits = driver.find_elements_by_xpath("//div[contains(@class,'digit-box')]/input")
for digit in digits:
    digit.send_keys("1")

你可以像这样发送到单独的盒子

digits[2].send_keys("3")

你可以通过xpath找到所有的输入标签,然后send_keys给他们。

整个代码是这样的

driver = webdriver.Chrome()
wait = WebDriverWait(driver, 10)
driver.get("https://testnet.phemex.com/login")
wait.until(EC.element_to_be_clickable((By.XPATH,"//a[.='Get Started']"))).click()
wait.until(EC.element_to_be_clickable((By.XPATH,"/html/body/div[1]/div/div/div/div[2]/div/div/div[3]/div[1]/span/input"))).send_keys('a')
wait.until(EC.element_to_be_clickable((By.XPATH,"/html/body/div[1]/div/div/div/div[2]/div/div/div[3]/div[2]/span/input"))).send_keys('a')
wait.until(EC.element_to_be_clickable((By.XPATH,"/html/body/div[1]/div/div/div/div[2]/div/div/div[4]/button"))).click()
digits = wait.until(EC.presence_of_all_elements_located((By.XPATH,"//div[contains(@class,'digit-box')]/input")))
for digit in digits:
    digit.send_keys("1")
digits[2].send_keys("4")

导入

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC

【讨论】:

  • 他们都工作,所以他应该没事,哈哈。
  • 不确定 element_to_be_clickable 是否适用于这种输入字段。在他的情况下,visibility_of_element_located 可能就足够了。
  • 已经通过测试了
【解决方案2】:

每个字段都有其唯一的定位符:.digit-box.svelte-1ysrabk &gt;.txt.svelte-1ysrabk.digit-box.svelte-1ysrabk:nth-of-type(n) &gt;input 下面是当你想用 1 填充每个字段的情况下的 sn-p。

digits = driver.find_elements_by_css_selector(".digit-box.svelte-1ysrabk >input")
for digit in digits:
    digit.send_keys("1")

要分别填写所有字段,请使用:

digit1 = driver.find_element_by_css_selector(".digit-box.svelte-1ysrabk:nth-of-type(1) >input")
digit1.send_keys("1")
digit2 = driver.find_element_by_css_selector(".digit-box.svelte-1ysrabk:nth-of-type(2) >input")
digit1.send_keys("2")
digit3 = driver.find_element_by_css_selector(".digit-box.svelte-1ysrabk:nth-of-type(3) >input")
digit1.send_keys("3")
...

或者您可以创建一个值列表并使用此列表中的值填充您的字段(自己尝试)。

【讨论】:

    猜你喜欢
    • 2013-01-12
    • 1970-01-01
    • 1970-01-01
    • 2020-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多