Python Selenium登录失败-错误的ID?

Python Selenium登录失败-错误的ID?,python,selenium,authentication,arcgis,Python,Selenium,Authentication,Arcgis,这只是一个快速的精神检查,我希望有人能关注一下 基本上,我正在尝试使用selenium登录此站点(ArcGIS Online): 这就是元素的外观: 我的登录代码如下所示: user = driver.find_element_by_name("user_username") password = driver.find_element_by_name("user_password") user.clear() user.send_keys(username) password.clear()

这只是一个快速的精神检查,我希望有人能关注一下

基本上,我正在尝试使用selenium登录此站点(ArcGIS Online):

这就是元素的外观:

我的登录代码如下所示:

user = driver.find_element_by_name("user_username")
password = driver.find_element_by_name("user_password")
user.clear()
user.send_keys(username)
password.clear()
password.send_keys(password)
driver.find_element_by_id("signIn").click()
在这种情况下,我使用的是ArcGIS登录选项…不确定是否需要首先激活该选项?我假设我在这里遗漏了一个步骤来实现此功能

我当前遇到的错误是:

NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"[name="user_username"]"}
真的很感激人们的想法

编辑:

更新代码至:

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

options = webdriver.ChromeOptions()
options.headless = True
browser = webdriver.Chrome(options=options)
url = "https://www.arcgis.com/home/signin.html?useLandingPage=true"
browser.get(url)

try:
    user = WebDriverWait(browser, 10).until(
        EC.presence_of_element_located((By.ID, "user_username"))
    )

    password = WebDriverWait(browser, 10).until(
        EC.presence_of_element_located((By.ID, "user_password"))
    )  

    signin = WebDriverWait(browser, 10).until(
        EC.presence_of_element_located((By.ID, "signIn"))
    ) 

    user.clear()
    user.send_keys(username)
    password.clear()
    password.send_keys(password)
    signin.click()

finally:
    browser.quit()
现在得到这个错误:

TypeError: object of type 'WebElement' has no len()
可能是做错了什么,我们将更深入地了解等待功能的正确用法

最终编辑:

对于偶然发现此页面的任何人,解决方案是等待加载元素,确保我是通过ID搜索的,并且…确保我没有输入错误!下面是一个工作场景:

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

username = "Hari"
password = "Seldon" 
options = webdriver.ChromeOptions()
options.headless = True
driver = webdriver.Chrome(options=options)
url = "https://www.arcgis.com/home/signin.html?useLandingPage=true"
driver.get(url)
try:
    user = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "user_username")))
    passwd = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "user_password")))
    user.clear()
    user.send_keys(username)
    passwd.clear()
    passwd.send_keys(password)
    driver.find_element_by_id("signIn").click()  

finally:
    driver.quit()

您正在使用
find_element_by_name
,但在代码中使用了id的值。我将其更改为
find_element_by_id
,它可以工作。代码如下:

user = browser.find_element_by_id("user_username")
password = browser.find_element_by_id("user_password")
user.clear()
user.send_keys(username)
password.clear()
password.send_keys(password)
browser.find_element_by_id("signIn").click()

您应该先等待元素加载到页面上:

user = WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.ID, "user_username")))
password = WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.ID, "user_password")))
user.clear()
user.send_keys("aaa")
password.clear()
password.send_keys("bbb")
driver.find_element_by_id("signIn").click()
等待功能需要以下导入:

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

id中似乎有一个输入错误。它不是ser_用户名。它在站点中的user_用户名。我的错误我复制了它。它现在被更正了,但也没有使用“user_用户名”运行。请尝试以下链接:这很有帮助-我可以看到它现在确实找到了元素,但我得到了错误:“TypeError:类型为'WebElement'的对象没有len()“是的,也尝试过这种变化,但仍然得到了异常:NoSuchElementException:Message:没有这样的元素:无法找到元素:{”方法“:“css选择器”,“选择器”:“[id=”user\u username“]”谢谢-这几乎就是我现在拥有的,但仍然没有运气。我似乎能够放置用户名/密码,但登录单击不起作用。它似乎始终是:“TypeError:type'WebElement'的对象没有len()”我刚刚看到您的编辑。您有一个名为“password”的变量,用于存储要向其发送密钥的webelement。但是您发送给WebElements的是一个同名的变量。因此,您正在尝试键入webelement。请确保有不同的变量名,然后再试一次。这是一个很好的捕获,我很抱歉。现在多任务处理太多了。我只是更新了代码,没有错误!