Chrome下Selenium Python点击Login按钮失败,报JavascriptException求助
解决Selenium点击Login按钮时的JavascriptException错误
针对你遇到的Cannot read properties of undefined (reading 'defaultView')错误,可按以下步骤排查修复:
1. 确保ChromeDriver与Chrome版本完全匹配
你当前Chrome版本是110.0.5481.178,必须下载对应版本的ChromeDriver,版本不兼容是触发这类JS错误的核心原因之一。
2. 抛弃time.sleep,改用显式等待控制操作时机
强制等待完全依赖固定时长,无法适配页面动态加载节奏,替换为WebDriverWait等待元素可交互,确保操作时机准确:
3. 检查页面是否存在iframe嵌套
若登录按钮位于iframe内部,需先切换到iframe上下文才能定位元素,可通过浏览器开发者工具查看元素所在层级结构。
4. 用更稳定的定位方式+替代点击方法
常规点击失效时,可尝试模拟鼠标动作点击,或直接执行JS点击绕过交互限制,同时优先使用文本类定位(如按钮文本)提升稳定性。
修改后的示例代码
import pandas as pd from selenium import webdriver from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By from selenium.webdriver.common.action_chains import ActionChains driver = webdriver.Chrome(executable_path=r'C:\Drivers\chromedriver.exe') # 移除隐式等待,避免与显式等待冲突 driver.delete_all_cookies() url="https://customer.nokia.com/s/" driver.get(url) wait = WebDriverWait(driver, 20) # 等待第一个弹窗按钮可点击并操作 first_button = wait.until(EC.element_to_be_clickable((By.XPATH, "//button[contains(@class, 'slds-button_outline-brand')]"))) first_button.click() # 等待Login按钮加载完成,优先用文本定位 login_btn = wait.until(EC.element_to_be_clickable((By.LINK_TEXT, "Login"))) # 方法1:用ActionChains模拟鼠标点击 actions = ActionChains(driver) actions.move_to_element(login_btn).click().perform() # 若仍失效,尝试方法2:JS直接点击 # driver.execute_script("arguments[0].click();", login_btn) # driver.quit()
额外排查点
- 检查页面是否有遮罩层、弹窗遮挡登录按钮
- 禁用浏览器扩展,避免干扰页面渲染
- 尝试以无头模式运行浏览器,排除界面渲染异常问题
内容的提问来源于stack exchange,提问作者Schrödinger's Cat
相关产品推荐
相关产品推荐

