使用 python 和 selenium 的随机银行类型身份验证

Random banking type authentication using python and selenium

我的任务是尝试为一个令人难忘的单词字段输入身份验证详细信息,例如网上银行,您有一个 8 位数字,系统会提示您随机选择这些。

数字显示在输入框旁边'Enter 5th character'

输入框字段:

<input style="border:none;" size="1" maxlength="1" type="password" name="e0" id="eid1" class="mem" value="" tabindex="1">

<input style="border:none;" size="1" maxlength="1" type="password" name="e1" id="eid2" class="mem" value="" tabindex="1">

所有信息都保存在每个框的 tr 中,如下所示:

<tr>
    <td class="white"><input type="hidden" name="0" value="5">Enter  8th character </td>
    <td class="Mem"><input style="border:none;" size="1" maxlength="1" type="password" name="e0" id="eid1" class="memCd" value="" tabindex="1"></td>
</tr>

以前有人用硒遇到过这个问题吗?

已编辑

表格看起来像这样

<form method="POST" action="nextStage.php" autocomplete="off">
    <input type="hidden" name="return" id="returnid" value="" />
    <table align="center" cellspacing="1" cellpadding="4">
        <tbody><tr>
        <td><input type="hidden" name="0" value="0" />Enter  1st character </td>
        <td colspan="2"><input size="1" maxlength="1" type="password" name="e0" id="eid1" class="enterDetails" value="" tabindex="1" /></td>
        </tr><tr>
        <td><input type="hidden" name="1" value="2" />Enter  3rd character </td>
        <td colspan="2"><input size="1" maxlength="1" type="password" name="e1" id="eid2" class="enterDetails" value="" tabindex="2" /></td>
        </tr><tr>
        <td><input type="hidden" name="2" value="4" />Enter  5th character </td>
        <td colspan="2"><input size="1" maxlength="1" type="password" name="e2" id="eid3" class="enterDetails" value="" tabindex="3" /></td>

编辑以显示新代码

pattern = re.compile(r"Enter (\d+)\w+ character of memorable word")
number_string = driver.find_element_by_css_selector("#homePane > form > table > tbody > tr:nth-child(1) > td:nth-child(1)").text
number = int(pattern.search(number_string).group(1))

target_input = driver.find_element_by_css_selector("#homePane > form > table > tbody > tr:nth-child(1) > td:nth-child(2) > input[type=password]")
target_input.send_keys(secret_string[number])

number_string = driver.find_element_by_css_selector("#homePane > form > table > tbody > tr:nth-child(2) > td:nth-child(1)").text
number = int(pattern.search(number_string).group(1))

target_input = driver.find_element_by_css_selector("#homePane > form > table > tbody > tr:nth-child(2) > td:nth-child(2) > input[type=password]")
target_input.send_keys(secret_string[number])


number_string = driver.find_element_by_css_selector("#homePane > form > table > tbody > tr:nth-child(3) > td:nth-child(1)").text
number = int(pattern.search(number_string).group(1))
target_input = driver.find_element_by_css_selector("#homePane > form > table > tbody > tr:nth-child(3) > td:nth-child(2) > input[type=password]")
target_input.send_keys(secret_string[number])

使用 Enter Nth character 文本找到 input,例如,使用 CSS 选择器,从文本中提取 N 数字,从秘密中获取字符按索引字符串并将其发送到密码 input:

import re

secret_string = "secret string"

pattern = re.compile(r"Enter (\d+)\w+ character")

number_string = driver.find_element_by_css_selector("tr > td.white > input").text
number = int(pattern.search(number_string).group(1))

target_input = driver.find_element_by_css_selector("tr > td.mem > input[type=password]")

target_input.send_keys(secret_string[number])