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

Selenium Python无法点击MyWorkdayJobs登录页Sign In按钮求助

问题描述

我正尝试使用Python的Selenium工具点击页面https://walmart.wd5.myworkdayjobs.com/login上的Sign In按钮,已尝试通过XPATH、ID定位元素,并使用click()、send_keys(Keys.enter)、submit()方法,但均无法触发点击操作,恳请各位提供帮助。

页面截图:Walmart登录页面截图

以下是我编写的代码:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By

options = Options()
options.add_experimental_option('excludeSwitches', ['enable-logging'])

# 原代码此处参数写法有误,已修正格式
driver = webdriver.Chrome(executable_path=r"C:\Users\user\Downloads\chromedriver_win32 (1)\chromedriver.exe", chrome_options=options)
url = "https://walmart.wd5.myworkdayjobs.com/login"
driver.get(url)
driver.maximize_window()
driver.implicitly_wait(20)
# 填写账号密码
driver.find_element(By.XPATH,"//*[@id='input-4']").send_keys("1234@gmail.com")
driver.find_element(By.XPATH,"//*[@id='input-5']").send_keys("1233@1102")
# 尝试通过Tab+Enter触发登录
driver.find_element(By.XPATH,"//*[@id='input-5']").send_keys(Keys.TAB + Keys.ENTER)
解决方案建议

1. 先修正基础语法错误

原代码中webdriver.Chrome()的参数传递存在错误,chrome_options不能写在executable_path的字符串里,必须作为单独参数传入,这会直接导致驱动初始化异常,先修正这个问题。

2. 用显式等待替代隐式等待

Workday页面属于动态加载类型,隐式等待的可靠性不足,改用显式等待确保元素处于可交互状态:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 填写账号密码后,等待Sign In按钮可点击
sign_in_btn = WebDriverWait(driver, 20).until(
    EC.element_to_be_clickable((By.XPATH, "//button[normalize-space()='Sign In']"))
)
sign_in_btn.click()

3. 检查是否存在iframe嵌套

部分Workday登录表单会被放在iframe中,需先切换到iframe内操作:

# 遍历页面所有iframe,尝试定位按钮
for iframe in driver.find_elements(By.TAG_NAME, 'iframe'):
    driver.switch_to.frame(iframe)
    try:
        sign_in_btn = WebDriverWait(driver, 10).until(
            EC.element_to_be_clickable((By.XPATH, "//button[normalize-space()='Sign In']"))
        )
        sign_in_btn.click()
        break
    except:
        driver.switch_to.default_content()

4. 用JavaScript强制触发点击

如果常规click()方法无效,可通过执行JS代码强制触发按钮点击:

sign_in_btn = WebDriverWait(driver, 20).until(
    EC.presence_of_element_located((By.XPATH, "//button[normalize-space()='Sign In']"))
)
driver.execute_script("arguments[0].click();", sign_in_btn)

5. 使用更稳定的元素定位方式

避免依赖动态生成的ID(如input-4、input-5可能随页面更新变化),改用以下更稳定的定位方式:

  • 按按钮文本:By.XPATH, "//button[normalize-space()='Sign In']"
  • 按自动化属性:By.CSS_SELECTOR, "button[data-automation-id='signInButton']"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 19:42:28