python - 如何使用 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 中的//
表示法意味着该路径正在定位任何字段——电子邮件和密码恰好具有相同的包含div
和input
元素,并且与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()
推荐阅读
- c# - 使用 iPad Pro 自动化设置面板
- python - MySql 5.7 错误(这与 sql_mode=only_full_group_by 不兼容)
- java - 方法调用“toString”可能会产生“java.lang.NullPointxception”
- powershell - 根据值从数组中选择一组值
- c - C程序不会按升序排列数字
- java - 如何使用 Java 设置 JLabel 的颜色?
- c# - 使用 AngularJS 绑定 html.index 中的数据值时出错
- r - 从每个唯一对中提取信息
- elasticsearch - 确定文档在 Elasticsearch 中的匹配方式
- python-3.x - 如何将 URL 中的 XML 解析为 Excel 工作表?