You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python Selenium自动化登录时无法定位用户名密码输入框问题求助

问题描述

我正在编写脚本实现交易账户的自动化登录,目前已可以成功点击进入登录页面,但脚本无法定位到用户名或密码输入框。

我编写的脚本代码如下:

PATH = "C:\Program Files (x86)\chromedriver.exe"

driver = webdriver.Chrome(PATH)

driver.get("https://www.anz.com.au/personal/investing-super/online-share-investing/")

## 点击登录按钮
try:
    element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.LINK_TEXT, "Log in"))
    )
    element.click()
    print("点击登录按钮成功")

except:
    print("登录按钮点击失败")
    driver.quit()
    
## 输入账号密码
driver.switch_to.frame(driver.find_element_by_tag_name('iframe'))
driver.find_element_by_xpath("//*[@id = 'username']").send_keys("123456")
driver.find_element_by_id("password").send_keys("hello")

# try:
#     # print("切换成功")
#     element = WebDriverWait(driver, 10).until(
#         EC.presence_of_element_located((By.ID, "username"))
#     )
#     print("元素定位成功")
#     element.click()
#     element.send_keys("blanklogin")
  
# except:
#     print("账号密码登录失败")
#     driver.quit()

我尝试了同时使用xPath和ID两种方式定位元素,均未成功,收到的报错信息如下:

selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id = 'username']"}

我注意到其他用户也曾遇到iframe相关的元素定位问题,因此我在代码中添加了iframe切换逻辑,但依然没有解决问题。我也尝试过先点击输入框再填写内容(代码中注释的try-except语句逻辑),同样没有生效。
恳请各位提供相关建议和解决方案,非常感谢!
补充:相关页面的HTML截图可访问 html


解决方案

  • 核心问题出在iframe的定位逻辑:你直接用find_element_by_tag_name('iframe')会默认匹配页面第一个iframe,大概率不是登录表单所在的iframe,且你没有等待iframe加载完成就执行切换操作,自然无法定位到内部输入框。
  • 修正后的代码如下,你需要先在浏览器控制台找到登录表单对应的iframe的唯一属性(比如ID、name、xpath),替换代码中iframe的定位规则即可:
PATH = "C:\Program Files (x86)\chromedriver.exe"

driver = webdriver.Chrome(PATH)
driver.get("https://www.anz.com.au/personal/investing-super/online-share-investing/")

## 点击登录按钮
try:
    element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.LINK_TEXT, "Log in"))
    )
    element.click()
    print("点击登录按钮成功")

except:
    print("登录按钮点击失败")
    driver.quit()
    
## 等待iframe加载并切换,然后输入账号密码
try:
    # 此处替换为你页面中登录iframe的实际定位规则,比如ID为loginIframe就写By.ID, "loginIframe"
    login_iframe = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, "loginIframe"))
    )
    driver.switch_to.frame(login_iframe)

    # 等待用户名输入框加载完成后输入
    username_input = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.ID, "username"))
    )
    username_input.send_keys("123456")
    
    # 输入密码
    driver.find_element_by_id("password").send_keys("hello")
except Exception as e:
    print(f"登录流程失败,错误信息:{e}")
    driver.quit()
  • 补充说明:如果iframe没有唯一id和name,可以通过xpath匹配iframe的src属性或者父级元素属性来定位,确保匹配到的是包含用户名输入框的iframe即可。

内容的提问来源于stack exchange,提问作者Sushiix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 16:36:03