选择具有相同名称的第二DIV CLASS-Python Selenium

时间:2019-10-16 11:14:14

标签: python selenium-webdriver

我可以选择第一个class="hm-Login_InputField ">并输入用户名

<div class="hm-Login ">
    <div class="hm-Login_UserNameWrapper ">
        <input type="text" class="hm-Login_InputField ">
        <div class="hm-Login_InputText ">Join</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>

elem = driver.find_element_by_class_name("hm-Login_InputField")
elem.click()
elem.send_keys("xxxxx")

我已经为第二个文本输入/密码文本框复制了Xpath。结果不一致,有时会起作用,有时却不会。

/html/body/div[1]/div/div[1]/div/div[1]/div[2]/div/div[2]/input[2]

如何选择第二个class="hm-Login_InputField?文本输入/密码文本框?

我需要相对的Xpath吗?这是怎么得出的?

我尝试过:

elem = driver.find_element_by_class_name("hm-Login_InputField Hidden ")
elem.click()
elem.send_keys("xxxxx")
  

NoSuchElementException:否这样的元素:无法找到元素:{“ method”:“ css选择器”,“ selector”:“。hm-Login_InputField隐藏”}     (会话信息:chrome = 77.0.3865.120)

3 个答案:

答案 0 :(得分:1)

此xpath成功:

Elem = driver.find_element_by_xpath(**"//div[@class='hm-Login_PasswordWrapper ']//input[@type='text']")** 
elem.click() 
elem.clear() 

我现在可以选择该框。

感谢@Shubham Jain

答案 1 :(得分:0)

如果有时可行,则可能是因为元素加载速度较慢。在调用第二个元素之前,请尝试添加time.sleep(2),看看它是否有效。 另外,您可以使用driver.find_element_by_class_name("hm-Login_InputField Hidden ")代替driver.find_elements_by_class_name("hm-Login_InputField"),这将返回所有类为"hm-Login_InputField"的元素。然后elem[0]将是您的第一个输入elem[1],第二个将继续运行。

答案 2 :(得分:0)

检查是否有任何帧(如果存在),则需要先切换到帧。

还先添加诸如visibilityOfElementLocatedpresenceOfElementLocated之类的显式等待

也可以在xpath下尝试:

//input[@type='password']

OR

//div[@class='hm-Login ']//div[@class='hm-Login_PasswordWrapper ']//input[@type='password']
相关问题