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

无法向元素ID注入输入:Apple开发者网站登录自动化求助

Apple开发者网站登录自动化输入注入问题排查与修复

我正在实现Apple开发者网站登录流程的自动化及2FA处理(2FA部分手动操作),已经定位到元素ID,但输入注入环节遇到问题。近期Selenium、Chrome及ChromeDriver的更新引入了未预见的问题,中断数月后回归,无法解析当前错误栈。

错误栈信息

Stacktrace:
        GetHandleVerifier [0x00D04DE3+43907]
        (No symbol) [0x00C90741]
        (No symbol) [0x00B833ED]
        (No symbol) [0x00BB6760]
        (No symbol) [0x00BB6C2B]
        (No symbol) [0x00BE6F62]
        (No symbol) [0x00BD2BA4]
        (No symbol) [0x00BE55CA]
        (No symbol) [0x00BD2956]
        (No symbol) [0x00BAE17E]
        (No symbol) [0x00BAF32D]
        GetHandleVerifier [0x00FB5AF9+2865305]
        GetHandleVerifier [0x00FFE78B+3163435]
        GetHandleVerifier [0x00FF8441+3138017]
        GetHandleVerifier [0x00D8E0F0+605840]
        (No symbol) [0x00C9A64C]
        (No symbol) [0x00C96638]
        (No symbol) [0x00C9675F]
        (No symbol) [0x00C88DB7]
        BaseThreadInitThunk [0x76397BA9+25]
        RtlInitializeExceptionChain [0x775BBD3B+107]
        RtlClearBits [0x775BBCBF+191]

当前代码

from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.support.ui import WebDriverWait
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from pywinauto import keyboard as ky
from selenium.webdriver.support import expected_conditions as EC
import time
import sys

url = sys.argv[1]
username = sys.argv[2]
password = sys.argv[3]

driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))


driver.get(url)
  
wait = WebDriverWait(driver, 10) #set to 0 to wait indefinitely until the elements are presented.
username_field = wait.until(EC.presence_of_element_located((By.ID,"account_name_text_field")))
username_field.send_keys('username')

ky.send_keys("VK_SHIFT down}{VK_TAB}{VK_SHIFT up}")
ky.send_keys("{ENTER}")

password_field = wait.until(EC.presence_of_element_located((By.ID,"password_text_field")))
password_field.send_keys('password' + Keys.RETURN)
time.sleep(4)

driver.close()
driver.quit()

问题分析与修复方案

  1. 硬编码输入值:代码中使用'username'、'password'字符串而非命令行传入的变量,导致实际输入错误的账号密码。
  2. 跨工具交互冲突:混用pywinauto全局键盘操作与Selenium元素交互,在Chrome新版本中极易触发不稳定问题,建议完全用Selenium处理页面操作。
  3. 等待条件不合理:presence_of_element_located仅确保元素存在,但无法保证元素可交互,应改用element_to_be_clickable。
  4. 冗余的TAB切换操作:直接定位密码框即可,无需通过TAB切换,避免页面结构变化导致操作失效。

修复后的代码

from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.support.ui import WebDriverWait
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC
import sys

url = sys.argv[1]
username = sys.argv[2]
password = sys.argv[3]

driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))
driver.get(url)
  
wait = WebDriverWait(driver, 10)

# 等待用户名框可交互并输入
username_field = wait.until(EC.element_to_be_clickable((By.ID, "account_name_text_field")))
username_field.send_keys(username)
username_field.send_keys(Keys.RETURN)  # 按回车跳转至密码页

# 等待密码框可交互并输入
password_field = wait.until(EC.element_to_be_clickable((By.ID, "password_text_field")))
password_field.send_keys(password)
password_field.send_keys(Keys.RETURN)

# 等待手动完成2FA验证
input("完成2FA验证后按回车继续...")

driver.quit()

额外注意事项

  • 确保Chrome、ChromeDriver与Selenium版本完全兼容,webdriver-manager会自动匹配,若仍有问题可手动指定对应版本。
  • Apple开发者网站存在反爬机制,频繁自动化操作可能触发限制,建议添加合理等待时间避免操作过快。
  • 移除pywinauto依赖,消除跨工具交互的不稳定因素。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 13:47:52