使用 Selenium 验证密码键盘表单 Python

Validating Pin-Pad form using Selenium Python

我正在尝试在网站上提供的密码键盘表单上输入代码并验证它。但是,我收到验证错误。我担心点击的图钉按钮没有被网站的脚本读取。谁能帮我这个?我附上代码和页面源代码。

网站UI是这样的

网站上的div class包含键盘的如下:-

     <div class="pin_pad">
        <span id='keypad1' onmouseout="this.className=''" onmouseover="this.className='pin_hover'">1</span>
        <span id='keypad2' onmouseout="this.className=''" onmouseover="this.className='pin_hover'">2</span>
        <span id='keypad3' onmouseout="this.className=''" onmouseover="this.className='pin_hover'">3</span>
        <span id='keypad4' onmouseout="this.className=''" onmouseover="this.className='pin_hover'">4</span>
        <span class="submit_btn" onmouseout="this.className='submit_btn'" onmouseover="this.className='submit_btnpin_hover'" onclick="return validate();">Submit</span>
     </div>

我的密码是“4444”。我正在尝试使用 .click() 方法来点击“4”。虽然我可以看到“4”已被点击 4 次,但在提交时,页面显示验证错误。谁能帮我解决这个问题?这是我在 python 中的代码:-

pinpad = driver.find_elements_by_class_name('pin_pad')
element = driver.find_element_by_xpath("//span[text()=4]").click()
for k in range(4):
    actionChains = ActionChains(driver)
    actionChains.context_click(element).perform()
time.sleep(1)
driver.find_element_by_xpath("//span[text()='Submit']").submit()

而不是

context_click(element).perform()

这样做:

move_to_element(key4).click().perform()

context_click 用于右键单击,move_to_element() 用于将鼠标光标移动到指定元素。

简要说明:

你可以引入 WebDriverWait 来提高稳定性,我认为你不需要做 context_click() 而是 move_to_element() 加上 ActionChains 对象创建优化而不是 submit 你可能想使用 click()。查看下面的代码:

pinpad = driver.find_elements_by_class_name('pin_pad')
key4 = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "span#keypad4"))).click()
actionChains = ActionChains(driver)
for k in range(4):
    actionChains.move_to_element(key4).click().perform()
    sleep(1)
wait.until(EC.element_to_be_clickable((By.XPATH, "//span[text()='Submit']"))).click()