python selenium xpath无法定位元素

问题描述

我是 Python 和 Selenium 的新手,试图定位寄存器输入字段,但它不起作用。但是,find_element_by_xpath('//input[@name=" password"]') 适用于登录输入字段,因为输入文件具有相同的类和名称,我不确定如何在注册 div 中选择输入字段。这是 HTML 和 python 代码

<div class="sign-in j-sign-in">
                        <h4>Sign In</h4>
                        <p class="login-error"></p>
                        <form>
                            <div class="c-input">
                                <div class="input-title">Email Address:
                                    <i class="input-error-txt" style="display: none;">*</i>
                                </div>
                                <input placeholder="" autocomplete="" type="email" name="email" class="">
                                <ul class="emaillist" style="display: none;">
                                 
                                </ul>
                                <!---->
                                <!---->
                            </div>
                            <div class="c-input">
                                <div class="input-title">Password:
                                    <i class="input-error-txt" style="display: none;">*</i></div> 
                                    <input placeholder="" autocomplete="" type="password" name="password" class="">
                                <!---->
                                <!---->
                                <!---->
                            </div>
                        </form>
                <div class="col-xs-1 sign-in-rightborder"></div>
                <div class="col-xs-4 col-xs-offset-1">
                    <div class="sign-in j-newto-shein">
                        <h4>New to SHEIN</h4>
                        <form>
                            <div class="c-input">
                                <div class="input-title">Email Address:<i class="input-error-txt" style="display: none;">*</i></div> <input placeholder="" autocomplete="" type="email" name="email" class="input-error">
                                <ul class="emaillist" style="display: none;"></ul>
                                <!---->
                                <div class="input-error-txt">Please enter an email address.</div>
                            </div>
                            <div class="c-input">
                                <div class="input-title">Password:<i class="input-error-txt" style="display: none;">*</i></div> <input placeholder="" autocomplete="" type="password" name="password" class="">
                                <!---->
                                <!---->
                                <!---->
                            </div>
                            <div class="normal-info she-hide">
                                <div class="">
                                    <p class="">· 8 characters minimum</p>
                                    <p class="">· At least one letter</p>
                                    <p class="">· At least one number</p>
                                </div>
                            </div>
                            <div class="c-input input-mar">
                                <div class="input-title">Confirm Password:<i class="input-error-txt" style="display: none;">*</i></div> <input placeholder="" autocomplete="" type="password" name="cfPassword" class="">
                                <!---->
                                <!---->
                                <!---->
                            </div>
    
    
email = browser.find_element_by_xpath(
            '//div[@class="sign-in j-sign-in"]/input[@name="email"]')
            email.clear()
            email.send_keys("test123@gmail.com")
            password = browser.find_element_by_xpath(
            '//div[@class="sign-in j-newto-shein"]/input[@name="password"]')
            password.clear()
        password.send_keys("112233")
        
        sign = browser.find_element_by_xpath(
            '//div[@class="sign-in-btn-wrapper"]/button[@class="she-btn-black she-btn-l she-btn-block"]').click()

我得到的错误

selenium.common.exceptions.NoSuchElementException:消息:没有这样的元素:无法定位元素:

解决方法

email = browser.find_element_by_xpath('//div[@class="sign-in j-sign-in"]/input[@name="email"]');

这不起作用,因为 input 不直接位于 //div[@class="sign-in j-sign-in"] 之下。你需要这样写:

email = browser.find_element_by_xpath('//div[@class="sign-in j-sign-in"]//input[@name="email"]');

进入输入。

同样适用于进入 password 输入字段。

在您的 HTML 代码中找不到类 sign-in-btn-wrapper 的元素,所以我不能说您的代码中的最后一个 xPath 有什么问题,但我怀疑这可能是同样的问题。

,

您好,如果您能提供完整的 HTML,那就太好了,因为我无法完全复制您的网站。所以按钮被遗漏了,你必须在

中重新添加按钮代码

所以我只是复制了 XPath 而不是完整的 XPath 对我有用。

代码如下:

from selenium import webdriver

options = webdriver.ChromeOptions()


browser = webdriver.Chrome(options=options)
browser.get("http://127.0.0.1")


email = browser.find_element_by_xpath(
'/html/body/div/form/div[1]/input')
email.clear()
email.send_keys("test123@gmail.com")
password = browser.find_element_by_xpath(
'/html/body/div/form/div[2]/input')
password.clear()
password.send_keys("112233")