我是Selenium Python的新手,我正在自动完成一项任务。在我的任务中,我需要在两个字段中输入密码 - '密码'和'确认密码'
我正在使用send_keys
来传递密码文字。但我的问题是两个字段都具有相同的属性,并且动态生成属性。下面是两个字段的HTML元素。
密码字段
<input size="12" id="mx-pw-1560134066" onblur="this.onkeyup();" value="" onkeyup="MxTableOnChangeText(this, 'CREDENTIAL_comhpmvcduiviewCreateVCDomainGroupAction1484904977993', '09USE939SBK9', 5)" type="PASSWORD">
确认密码字段
<input size="12" id="mx-pw-1337668046" onblur="this.onkeyup();" value="" onkeyup="MxTableOnChangeText(this, 'CREDENTIAL_comhpmvcduiviewCreateVCDomainGroupAction1484904977993', '09USE939SBK9', 6)" type="PASSWORD">
ID字段中的数字是动态生成的。 onblur对两者来说都是一样的。我在两个字段之间的这些html中只能看到差异是MxTableOnChangeText
的最后一个参数。 FOr密码字段为5,对于确认密码,它为6.因此根据参数我需要传递值。
为此,我尝试在方法Arguments中使用通配符,如下所示。但我得到错误。
driver.find_element_by_xpath('//input[matches(@onkeyup,"MxTableOnChangeText(this,*,*,5)")').send_keys('password')
请帮助我如何处理动态ID或如何在Method参数中使用通配符。
TIA
答案 0 :(得分:0)
处理动态生成的id
似乎是不可接受的,因为id
(mx-pw-
)的字符串基础对于这两个字段都是相同的。选择这两个元素的简单方法是使用index:
password = driver.find_elements_by_xpath('//input[@type="PASSWORD"]')[0]
confirm_password = driver.find_elements_by_xpath('//input[@type="PASSWORD"]')[1]
或者您可以使用onkeyup
这样的属性:
password = driver.find_element_by_xpath('//input[contains(@onkeyup, ", 5)")]')
confirm_password = driver.find_element_by_xpath('//input[contains(@onkeyup, ", 6)")]')
答案 1 :(得分:0)
如果您的id
是动态的,mx-pw
已修复且只有数字会发生变化,则有一种替代方式 -
// for password
driver.find_elements_by_xpath('//input[starts-with(@id, "mx-pw")][1]')
// for confirm password
driver.find_elements_by_xpath('//input[starts-with(@id, "mx-pw")][2]')