【问题标题】:How can I send keys to a hidden password box如何将密钥发送到隐藏的密码框
【发布时间】:2019-04-23 10:44:08
【问题描述】:

我正在尝试登录网站www.bet365.com

我可以发送用户名的登录信息,但是为了安全起见,密码框分为可见元素和隐藏元素。

如何将密码发送到邮箱以自动登录?

我已尝试访问可见元素,但是在传递时并未收到密码的所有字符。

当尝试传递给隐藏元素时,没有明显发送密码。

我也尝试在发送前单击可见元素,但这也没有用。

wait=WebDriverWait(driver,3)
userele=wait.until(expected_conditions.element_to_be_clickable((By.CSS_SELECTOR,'div.hm-Login_UserNameWrapper input.hm-Login_InputField[type="text"]')))
userele.send_keys('xyz@gmail.com')

passwdele=wait.until(expected_conditions.element_to_be_clickable((By.CSS_SELECTOR,'div.hm-Login_PasswordWrapper input.hm-Login_InputField.Hidden[type="password"]')))
passwdele.send_keys('xxxxxxxxxxx')

btnelement=wait.until(expected_conditions.element_to_be_clickable((By.CSS_SELECTOR,'div.hm-Login_PasswordWrapper button.hm-Login_LoginBtn')))

btnelement.click()

这里是bet365页面元素的主要代码

<div class="hm-HeaderModule_UserAdmin ">
<div class="hm-Login ">

<div class="hm-Login_UserNameWrapper ">
<input type="text" class="hm-Login_InputField ">
<div class="hm-Login_InputText ">Join Now</div></div>

<div class="hm-Login_PasswordWrapper ">
<input type="text" class="hm-Login_InputField ">
<input type="password" class="hm-Login_InputField Hidden ">
<button tabindex="0" class="hm-Login_LoginBtn ">GO</button>
<div class="hm-Login_InputText ">Lost Login?</div></div></div></div>

目前只有传递的用户名有效。

【问题讨论】:

    标签: python selenium xpath css-selectors webdriverwait


    【解决方案1】:

    好吧,您可以像这样在可见输入中发送密码:

    代码:

    driver = webdriver.Chrome(executable_path = r'chromedriverPath')
    wait = WebDriverWait(driver,10)
    
    driver.maximize_window()
    
    driver.get("https://www.bet365.com/#/HO/")
    
    wait = WebDriverWait(driver, 10)
    
    wait.until(EC.element_to_be_clickable((By.XPATH,"//div[@title='New Customer Bonus']"))).click()
    
    userele = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,"div.hm-Login_UserNameWrapper input.hm-Login_InputField[type='text']")))
    userele.send_keys('xyz@gmail.com')
    
    passwdele = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,"div.hm-Login_PasswordWrapper input.hm-Login_InputField[type='text']")))
    passwdele.send_keys('xxxxxxxxxxx')
    
    btnelement = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,'div.hm-Login_PasswordWrapper button.hm-Login_LoginBtn')))
    
    btnelement.click()  
    

    进口将是:

    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC 
    

    如果您遇到任何问题,请告诉我。

    【讨论】:

    • 您好,感谢您的解决方案,但是这仍然会出现仅发送 4 个密码密钥的相同问题,您有什么想法吗?
    【解决方案2】:

    您需要避免以所有可能的方式将send_keys() 调用到隐藏的密码框。但是,为您要交互的页面上的第一个元素引入 WebDriverWait 就足够了,并且在与 &lt;input&gt; 元素交互时,您不需要多次调用 WebDriverWait。您可以尝试以下任一Locator Strategies

    • 使用CSS_SELECTOR

      WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div.hm-Login_UserNameWrapper>input.hm-Login_InputField[type='text']"))).send_keys('xyz@gmail.com')
      driver.find_element_by_css_selector("div.hm-Login_PasswordWrapper>input.hm-Login_InputField:not(.Hidden)").send_keys("hello")
      
    • 使用XPATH

      WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='hm-Login_UserNameWrapper ']/input[@class='hm-Login_InputField ' and @type='text']"))).send_keys('xyz@gmail.com')
      driver.find_element_by_xpath("//div[@class='hm-Login_PasswordWrapper ']/input[contains(@class, 'hm-Login_InputField') and not(@class='Hidden')]").send_keys("Jp1875")
      
    • 注意:您必须添加以下导入:

      from selenium.webdriver.support.ui import WebDriverWait
      from selenium.webdriver.common.by import By
      from selenium.webdriver.support import expected_conditions as EC
      

    【讨论】:

    • 感谢您的帮助!仍然有一些问题,但会在你的建议下玩一玩
    • @Jp1875 你现在正面临什么问题
    • 它似乎仍在修剪发送的密码密钥,因此并非所有密码都在密码框中
    猜你喜欢
    • 2017-11-04
    • 1970-01-01
    • 2018-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-08
    • 1970-01-01
    相关资源
    最近更新 更多