如何将密钥发送到隐藏的密码框中

时间:2019-04-23 10:44:09

标签: python selenium xpath css-selectors webdriverwait

我正在尝试登录网站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>

仅当前传递的用户名有效。

2 个答案:

答案 0 :(得分:0)

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

代码:

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 

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

答案 1 :(得分:0)

您需要避免以所有可能的方式调用send_keys()到隐藏的密码框中。但是,在要交互的页面上为第一个元素引入 WebDriverWait 就足够了,与<input>交互时无需多次调用 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