问题描述
我是 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")