Selenium Python无法点击MyWorkdayJobs登录页Sign In按钮求助
问题描述
我正尝试使用Python的Selenium工具点击页面https://walmart.wd5.myworkdayjobs.com/login上的Sign In按钮,已尝试通过XPATH、ID定位元素,并使用click()、send_keys(Keys.enter)、submit()方法,但均无法触发点击操作,恳请各位提供帮助。
页面截图:
以下是我编写的代码:
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
相关产品推荐
相关产品推荐

