Selenium登录页用户名可输入但密码框无法输入问题咨询
Selenium操作道琼斯SSO登录页密码输入失败修复方案
问题原因
- 页面采用分步加载逻辑:初始加载阶段仅渲染用户名输入框,密码输入框需要在输入用户名并点击「继续」按钮后才会动态插入DOM树。你的代码注释了点击继续按钮的逻辑,导致密码框始终未生成,等待触发TimeoutError。
- 密码框CSS选择器存在两处问题:一是语法错误,缺少属性选择器的闭合方括号;二是使用
[class="password"]做精确匹配,而实际页面中密码输入框的class属性包含多个类名,无法命中目标元素。 - 用户名输入框在页面初始加载时就已存在,且你编写的用户名选择器刚好匹配到了对应元素,因此可以正常操作。
修复方案
按以下规则调整代码即可:
- 取消点击继续按钮代码的注释,触发密码框加载流程
- 修正密码框选择器的语法错误,换成更通用的匹配规则,优先使用
input[type="password"]类型匹配,稳定性更高 - 移除无意义的硬等待
time.sleep(10),如果需要延迟统一使用显式等待 - 补充导入缺失的
time依赖(如果保留硬等待的话)
修正后的可运行代码:
from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium import webdriver url = 'https://sso.accounts.dowjones.com/login?state=g6Fo2SBPMzZrekJkSlJDUWhfdHRaYmFMQXFzXzFSd2hFV01BMqN0aWTZIEVaQkVtc2FWT0Rkak1ENVl5Q21JeEM1Z3RhWWZZSUY4o2NpZNkgNWhzc0VBZE15MG1KVElDbkpOdkM5VFhFdzNWYTdqZk8&client=5hssEAdMy0mJTICnJNvC9TXEw3Va7jfO&protocol=oauth2&scope=openid%20idp_id%20roles%20email%20given_name%20family_name%20djid%20djUsername%20djStatus%20trackid%20tags%20prts%20suuid%20createTimestamp&response_type=code&redirect_uri=https%3A%2F%2Faccounts.barrons.com%2Fauth%2Fsso%2Flogin&nonce=fd1626cc-b81b-4b33-bb37-6795e64b26d3&ui_locales=en-us-x-barrons-81-2&ns=prod%2Faccounts-barrons#!/signin-password' driver = webdriver.Firefox() driver.get(url) # 输入用户名 WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, 'input[class="username"]'))).send_keys("email") # 点击继续按钮触发密码框加载 WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.CLASS_NAME, 'continue-submit'))).click() # 输入密码 WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, 'input[type="password"]'))).send_keys("password") # 提交登录 WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.CLASS_NAME, 'basic-login-submit'))).click()
内容的提问来源于stack exchange,提问作者theEconCsEngineer
相关产品推荐
相关产品推荐

