如何使用 Python 抓取特定字段,如下面的 HTML 代码所示?



这是电子邮件字段的HTML代码:

<div class="forge-form-group forge-col-12"><label class="">Email</label><input class="forge-form-control" data-fieldname="email" name="email" type="email" value=""><small class="forge-form-text forge-text-muted">Haven't signed up?<a class="forge-ml-2" href="#">Create an account</a></small></div>
<input class="forge-form-control" data-fieldname="email" name="email" type="email" value="">

这是我的Python代码:

email_cell=driver.find_element_by_xpath("//div[@class='forge-form-group forge-col-12']//input[@class='forge-form-control']")

但问题是密码也有一个相同的字段。它与等同于密码的数据字段名称不同。这也是HTML代码片段:

<div class="forge-form-group forge-col-12"><label class="">Password</label><a class="forge-float-right" href="#">Forgot password?</a><input class="forge-form-control" data-fieldname="password" name="password" type="password" value=""></div>

现在我对如何分别访问这两个字段感到非常困惑。我正在自动化的页面可以在这里找到: https://moz.com/login。

示例中使用的 XPath 用于查找两个字段 - 电子邮件和密码。这不适用于您的代码,因为您只是尝试查找电子邮件。XPath 中的//表示法表示路径正在定位任何字段 - 电子邮件和密码恰好具有相同的包含divinput元素,具有相同的class名称。我们需要使用一个唯一的属性来定位每个元素——在这种情况下,我们可以使用data-fieldname属性来获取正确的字段。

还建议在"电子邮件"字段上调用WebDriverWait,以便在尝试查找密钥并将其发送到元素之前为页面提供足够的加载时间。

下面的代码示例应让您了解如何使用这些元素属性。这是在您提供的页面上输入电子邮件,密码并单击登录的示例 - 我已经在本地成功运行了它:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# add the above imports

driver.get("https://www.moz.com/login")
# wait for email field to exist
email_cell = WebDriverWait(driver, 15).until(EC.presence_of_element_located((By.XPATH, "//input[@data-fieldname='email']")))
# send keys to email field
email_cell.send_keys("myemail")
# locate password and send keys
password_cell = driver.find_element_by_xpath("//input[@data-fieldname='password']").send_keys("mypassword")
# click log in
driver.find_element_by_xpath("//input[@value='Log in']").click()

最新更新