Mac M1 Pro环境下Python Selenium无法输入密码问题求助
针对M1 Pro Mac上Selenium无法输入Naver密码、但Windows系统正常的情况,给出以下可行的解决方法:
1. 修正Mac系统的粘贴快捷键
Mac的粘贴快捷键是Command + V,而非Windows的Control + V,当前代码用Keys.CONTROL导致粘贴失败。修改密码输入部分的代码:
# 替换原pw.send_keys(Keys.CONTROL, 'v') pw.send_keys(Keys.COMMAND, 'v')
同时建议把账号输入的粘贴快捷键也修正:
# 替换原id.send_keys(Keys.CONTROL, 'v') id.send_keys(Keys.COMMAND, 'v')
2. 直接输入账号密码(绕过剪贴板限制)
部分网站会对剪贴板操作做反爬限制,试试直接用send_keys输入,代替pyperclip粘贴:
# 账号输入替换 id = driver.find_element(By.CSS_SELECTOR, '#id') id.click() id.send_keys('myid') # 直接输入账号 # 密码输入替换 pw = driver.find_element(By.CSS_SELECTOR, '#pw') pw.click() pw.send_keys('mypw') # 直接输入密码
3. 确保ChromeDriver适配M1架构
webdriver_manager默认可能安装Intel架构的驱动,需指定M1版本。先查看Chrome版本(Chrome菜单→关于Google Chrome),再修改Service初始化代码:
# 替换原service初始化行,把driver_version换成你的Chrome版本号 service = Service(executable_path=ChromeDriverManager(driver_version='120.0.6099.109', os_type='mac_arm64').install())
4. 用显式等待替代time.sleep(提升稳定性)
隐式等待稳定性不如显式等待,确保元素可点击后再操作:
# 先导入显式等待相关模块 from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 账号输入部分修改 id = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, '#id'))) id.click() # 后续密码和登录按钮同理替换
修改后的完整示例代码
from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.chrome.options import Options from selenium.webdriver.common.keys import Keys import time from webdriver_manager.chrome import ChromeDriverManager from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 防止浏览器自动关闭 chrome_options = Options() chrome_options.add_experimental_option('detach', True) # 指定M1架构的ChromeDriver service = Service(executable_path=ChromeDriverManager(driver_version='你的Chrome版本号', os_type='mac_arm64').install()) driver = webdriver.Chrome(service=service, options=chrome_options) driver.implicitly_wait(5) driver.maximize_window() driver.get("https://nid.naver.com/nidlogin.login?mode=form&url=https://www.naver.com/") # 账号输入(直接输入+显式等待) id = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, '#id'))) id.click() id.send_keys('myid') time.sleep(1) # 密码输入(直接输入+显式等待) pw = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, '#pw'))) pw.click() pw.send_keys('mypw') time.sleep(1) # 点击登录按钮 login_btn = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, '#log\.login'))) login_btn.click()
内容的提问来源于stack exchange,提问作者insidepixce
相关产品推荐
相关产品推荐

