Python 如何使用Selenium和xpath选择Google登录页面中的电子邮件或电话字段?

Python 如何使用Selenium和xpath选择Google登录页面中的电子邮件或电话字段?,python,selenium,xpath,css-selectors,google-home,Python,Selenium,Xpath,Css Selectors,Google Home,我在这一页: 要选择此输入字段: 使用输入字段的xpath时: //*[@id="identifierId"] 或 我知道娜达 通常,当元素嵌套在iframe中时会发生这种情况,但在本例中不会发生这种情况。 或者至少我找不到有问题的iframe。请帮我理解为什么 from selenium import webdriver from selenium.webdriver.common.keys import Keys import time driver = webdri

我在这一页:
要选择此输入字段:

使用输入字段的xpath时:

//*[@id="identifierId"]

我知道娜达

通常,当元素嵌套在iframe中时会发生这种情况,但在本例中不会发生这种情况。 或者至少我找不到有问题的iframe。请帮我理解为什么

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
driver = webdriver.Chrome('./chromedriver.exe')
driver.get("https://accounts.google.com/signin/v2/identifier?service=wise&passive=true&continue=http%3A%2F%2Fdrive.google.com%2F%3Futm_source%3Den&utm_medium=button&utm_campaign=web&utm_content=gotodrive&usp=gtd&ltmpl=drive&flowName=GlifWebSignIn&flowEntry=ServiceLogin")
print(driver.title)
time.sleep(7)
search_bar = driver.find_element_by_xpath("//*[@id=\"identifierId\"]")
search_bar.send_keys("some text")

time.sleep(7000)
driver.close()
它的工作原理是这样的

输出:

访问Google Drive登录页面时的电子邮件或电话字段与GMail登录时的电子邮件或电话字段没有区别

要向元素发送字符序列,可以使用以下任一方法:

  • 使用
    id

    driver.find_element_by_id("identifierId").send_keys("AturSams")
    
  • 使用
    css\u选择器

    driver.find_element_by_css_selector("input#identifierId").send_keys("AturSams")
    
  • 使用
    xpath

    driver.find_element_by_xpath("//input[@id='identifierId']").send_keys("AturSams")
    

理想情况下,要向元素发送字符序列,您需要将
元素归纳为可点击()
,您可以使用以下任一选项:

  • 使用
    ID

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.ID, "identifierId"))).send_keys("AturSams")
    
  • 使用
    CSS\u选择器

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input#identifierId"))).send_keys("AturSams")
    
  • 使用
    XPATH

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@id='identifierId']"))).send_keys("AturSams")
    
  • 注意:您必须添加以下导入:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    

工具书类 您可以在以下内容中找到一些相关的详细讨论:


常见的
NoTouchElementException
错误是什么。我通常在元素位于iframe中时获取它们。是否添加了睡眠?是的,当然。:)你是说它现在对你有效吗?奇怪的是:D我做了同样的事情。@atracams不可靠的
time.sleep()
对HTML中的元素呈现有一定影响。因此,可以避免使用Never use time.swillp always buse显式等待的差异
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC