如何使用 Selenium 和 Python 根据标签名称和属性查找 Web 元素
How to find a web element based upon it's tag name and attributes using Selenium and Python
我正在尝试使用 Selenium 登录我的 Instagram 帐户。为此,我需要在登录表单中填写我的用户名和密码。
用户名输入栏有标签 input
和 name
等于 username
。有没有办法仅使用 name
属性和标签名称来检索此输入栏?我知道我可以使用 XPath 和 class 名称,但我只想使用 name
属性来做到这一点。
我尝试了下面的代码但出现错误。
代码:
username = driver.find_element(by = By.CSS_SELECTOR, value = "input[name = 'username']")
print(username.get_attribute("class"))
输出:
File "d:\Personal\CS\Bots\Instabot\msg.py", line 17, in <module>
username = driver.find_element(by = By.CSS_SELECTOR, value = "input[name = 'username']")
编辑:
我也尝试了 class 名称和 XPath,但它们都不起作用
XPath:
username = driver.find_element(by = By.XPATH, value = '//*[@id="loginForm"]/div/div[1]/div/label/input')
print(username.get_attribute("class"))
Class:
username = driver.find_element(by = By.CSS_SELECTOR, value = 'input._2hvTZ pexuQ zyHYP')
print(username.get_attribute("class"))
我做错了什么?
你没看错。 Phone 号码、用户名或电子邮件 <input>
字段具有 name
设置为用户名.
<input aria-label="Phone number, username, or email" aria-required="true" autocapitalize="off" autocorrect="off" maxlength="75" name="username" type="text" class="_2hvTZ pexuQ zyHYP" value="">
因此,要定位元素,您可以使用以下任一方法 :
使用css_selector:
element = driver.find_element(By.CSS_SELECTOR, "input[name='username']")
使用 xpath:
element = driver.find_element(By.XPATH, "//input[@name='username']")
因为该元素是一个 interactive 元素,理想情况下可以找到您需要诱导的元素 WebDriverWait for the and you can use either of the following :
使用CSS_SELECTOR:
element = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input[name='username']")))
使用 XPATH:
element = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@name='username']")))
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
我正在尝试使用 Selenium 登录我的 Instagram 帐户。为此,我需要在登录表单中填写我的用户名和密码。
用户名输入栏有标签 input
和 name
等于 username
。有没有办法仅使用 name
属性和标签名称来检索此输入栏?我知道我可以使用 XPath 和 class 名称,但我只想使用 name
属性来做到这一点。
我尝试了下面的代码但出现错误。
代码:
username = driver.find_element(by = By.CSS_SELECTOR, value = "input[name = 'username']")
print(username.get_attribute("class"))
输出:
File "d:\Personal\CS\Bots\Instabot\msg.py", line 17, in <module>
username = driver.find_element(by = By.CSS_SELECTOR, value = "input[name = 'username']")
编辑:
我也尝试了 class 名称和 XPath,但它们都不起作用
XPath:
username = driver.find_element(by = By.XPATH, value = '//*[@id="loginForm"]/div/div[1]/div/label/input')
print(username.get_attribute("class"))
Class:
username = driver.find_element(by = By.CSS_SELECTOR, value = 'input._2hvTZ pexuQ zyHYP')
print(username.get_attribute("class"))
我做错了什么?
你没看错。 Phone 号码、用户名或电子邮件 <input>
字段具有 name
设置为用户名.
<input aria-label="Phone number, username, or email" aria-required="true" autocapitalize="off" autocorrect="off" maxlength="75" name="username" type="text" class="_2hvTZ pexuQ zyHYP" value="">
因此,要定位元素,您可以使用以下任一方法
使用css_selector:
element = driver.find_element(By.CSS_SELECTOR, "input[name='username']")
使用 xpath:
element = driver.find_element(By.XPATH, "//input[@name='username']")
因为该元素是一个 interactive 元素,理想情况下可以找到您需要诱导的元素 WebDriverWait for the
使用CSS_SELECTOR:
element = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input[name='username']")))
使用 XPATH:
element = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@name='username']")))
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC