如何使用 Selenium 和 Python 根据标签名称和属性查找 Web 元素

How to find a web element based upon it's tag name and attributes using Selenium and Python

我正在尝试使用 Selenium 登录我的 Instagram 帐户。为此,我需要在登录表单中填写我的用户名和密码。

用户名输入栏有标签 inputname 等于 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