selenium python:如何向具有不同ID的隐藏密码发送密钥
我目前正在将selenium与python 2.7一起使用,并尝试在以下表单中插入密码: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
<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)。