selenium python:如何向具有不同ID的隐藏密码发送密钥

selenium python:如何向具有不同ID的隐藏密码发送密钥,python,html,selenium,login,passwords,Python,Html,Selenium,Login,Passwords,我目前正在将selenium与python 2.7一起使用,并尝试在以下表单中插入密码: <tr id="mockpass"> <td> <input type="text" value="something1" onfocus="document.getElementById('mockpass').style.display='none'; document.getElementById('realpass').style

我目前正在将selenium与python 2.7一起使用,并尝试在以下表单中插入密码:

<tr id="mockpass">
    <td>
        <input type="text" value="something1" onfocus="document.getElementById('mockpass').style.display='none';
        document.getElementById('realpass').style.display=''; document.getElementById('Irealpass').focus();">
    </td>
</tr>
<tr id="realpass" style="display: none;">
    <td>
        <input type="password" name="Password" id="Irealpass" onblur="if(this.value=='') {document.getElementById('mockpass').style.display='';
         document.getElementById('realpass').style.display='none';}">
       </td>
</tr>
错误:

raise exception_class(message, screen, stacktrace)
InvalidElementStateException: Message: Element is not currently interactable and may not be manipulated
我不确定这是否与改变元素的焦点或模糊有关,但我得到了元素却无法访问它

提前谢谢

更新:下一行解决了我的问题(仍然不知道为什么不起作用):

这样,我根本不需要使用passBoxElement或更改显示样式。

根据文档,此代码应该可以工作。
elem=driver.通过css选择器(“mockpass输入:第一个子项”)查找元素

如果仍然出现错误,请将浏览器窗口滚动到您试图访问的元素。

根据文档,此代码应该可以工作。
elem=driver.通过css选择器(“mockpass输入:第一个子项”)查找元素

如果仍然出现错误,请将浏览器窗口滚动到您试图访问的元素。

有几件事

首先,如果您试图执行用户场景,您希望避免使用
JavascriptExecutor
(JSE)。JSE允许您在页面上执行实际用户无法执行的操作。避免使用JSE,除非您绝对必须使用或不关心用户场景

问题是您想要的
输入
隐藏在您提供的HTML中。您可以在第二个
TR
中看到,
style=“display:none;”
。如果查看第一个
输入的HTML
,您将看到
onfocus
隐藏了第一个
TR

onfocus="document.getElementById('mockpass').style.display='none';
document.getElementById('realpass').style.display='';
然后取消隐藏第二个
TR

onfocus="document.getElementById('mockpass').style.display='none';
document.getElementById('realpass').style.display='';
因此,您需要做的是聚焦第一个
输入
,这将公开第二个
输入

需要注意的一点是,从第二个
输入中的JS来看,如果值为空,它将重新隐藏第二个
输入
,并公开第一个(撤消刚才所做的操作)

我会这样做

from selenium.webdriver.support import expected_conditions as EC

wait = WebDriverWait(driver, 10)
wait.until(EC.element_to_be_clickable(By.XPATH, '//*[@id="mockpass"]/td/input')).click()
wait.until(EC.element_to_be_clickable(By.XPATH, '//*[@id="Irealpass"]')).send_keys("myPassword")
有几件事

首先,如果您试图执行用户场景,您希望避免使用
JavascriptExecutor
(JSE)。JSE允许您在页面上执行实际用户无法执行的操作。避免使用JSE,除非您绝对必须使用或不关心用户场景

问题是您想要的
输入
隐藏在您提供的HTML中。您可以在第二个
TR
中看到,
style=“display:none;”
。如果查看第一个
输入的HTML
,您将看到
onfocus
隐藏了第一个
TR

onfocus="document.getElementById('mockpass').style.display='none';
document.getElementById('realpass').style.display='';
然后取消隐藏第二个
TR

onfocus="document.getElementById('mockpass').style.display='none';
document.getElementById('realpass').style.display='';
因此,您需要做的是聚焦第一个
输入
,这将公开第二个
输入

需要注意的一点是,从第二个
输入中的JS来看,如果值为空,它将重新隐藏第二个
输入
,并公开第一个(撤消刚才所做的操作)

我会这样做

from selenium.webdriver.support import expected_conditions as EC

wait = WebDriverWait(driver, 10)
wait.until(EC.element_to_be_clickable(By.XPATH, '//*[@id="mockpass"]/td/input')).click()
wait.until(EC.element_to_be_clickable(By.XPATH, '//*[@id="Irealpass"]')).send_keys("myPassword")
以下是应开展的工作:

passwdEle = self.driver.find_element(by='id', value='Irealpass') 
self.driver.execute_script('arguments[0].setAttribute("value","****")', passwdEle)
以下是应开展的工作:

passwdEle = self.driver.find_element(by='id', value='Irealpass') 
self.driver.execute_script('arguments[0].setAttribute("value","****")', passwdEle)

在提供的哪些行上出现异常?在passElement.clear()上,在提供的哪些行上出现异常?在passElement.clear()上,它不起作用,就像我试图将密码发送到passBoxElement(我需要将其发送到passElement)。它不起作用,就像我试图将密码发送到passBoxElement一样(我需要将其发送到passElement)。