如何使用Selenium和Python绕过弹窗并完成后续登录操作
Selenium登录失败问题修复方案
核心错误排查
- 重复初始化Chrome浏览器:你先后调用了两次
webdriver.Chrome(),相当于开了两个浏览器窗口,实际操作的是第二个窗口,多余的初始化容易引发状态异常 - 年龄弹窗处理逻辑错误:该站点的年龄确认弹窗是当前页面内的浮层,不是新弹出的窗口,你写的切换新窗口逻辑完全多余,还会导致页面上下文错乱,后续找不到输入框
- 元素定位语法过时:高版本Selenium已经废弃了
find_element_by_name、find_element_by_xpath这类旧写法,你已经导入了By类,要用driver.find_element(By.属性名, 值)的新写法 - 显式等待时间太短:你设置的
WebDriverWait(driver,1)只等1秒,页面加载稍微慢一点就会超时找不到元素,至少设置为5-10秒更稳妥 - 缺少credentials模块导入:你代码里直接用
credentials.login获取账号密码,但完全没有导入这个模块,运行直接报错,新手可以先直接写死账号密码测试 - 弹窗点击逻辑冗余:你重复点击了两次年龄确认按钮,实际只要点一次即可
修复后的可运行代码
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC import time # 只初始化一次Chrome即可,webdriver_manager和本地驱动二选一即可,这里用本地路径示例 PATH = "C:\Program Files\chromedriver.exe" driver = webdriver.Chrome(PATH) # 全局隐式等待设10秒,适配网络慢的情况 driver.implicitly_wait(10) # 打开登录页 driver.get("https://www.finewineandgoodspirits.com/webapp/wcs/stores/servlet/LogonForm?langId=-1&storeId=10051&catalogId=10051") time.sleep(1) # 处理年龄确认弹窗,只点一次确认按钮即可 age_confirm_btn = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, '//span[contains(text(), "at least 21 years old.")]'))) age_confirm_btn.click() time.sleep(1) # 直接填写账号密码,不需要切换窗口,这里直接写你的账号密码即可,无需调用未导入的credentials模块 fwgsUsername = "candmidlik@yahoo.com" fwgsPassword = "Password2" # 等待邮箱输入框可点击后再输入内容 emailField = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, "logonId"))) emailField.clear() emailField.send_keys(fwgsUsername) # 等待密码输入框可点击后再输入内容 passField = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, "logonPassword"))) passField.clear() passField.send_keys(fwgsPassword) # 等待登录按钮可点击后再触发点击 loginBtn = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, "loginButton"))) loginBtn.click()
新手操作提示
- 先确认你的Chrome浏览器和chromedriver版本完全一致,不然会出现启动失败的问题
- 如果运行时还是找不到元素,可以在对应元素上右键点击「检查」,确认元素的id、name属性和你写的一致
- 不要随便加窗口切换逻辑,除非你手动操作的时候确实有新的浏览器标签页/窗口弹出,才需要处理切换
内容的提问来源于stack exchange,提问作者Candcrush
相关产品推荐
相关产品推荐

