Selenium代码执行前几步后无响应,登录后无法操作页面元素问题求助
问题原因
- 固定休眠逻辑可靠性不足:登录后页面跳转、资源加载的时间受网络环境影响波动较大,固定2秒休眠结束后页面往往未完成完整渲染,此时执行刷新、元素查找操作会直接进入阻塞状态,引发程序无响应。
- 驱动启动参数配置缺失:控制台输出的SSL握手失败报错是未配置忽略证书校验参数导致,GPU相关报错是Chrome默认开启的硬件加速在驱动适配较差的环境下会卡住页面加载流程,两类报错都会中断页面正常加载。
- 页面操作逻辑错误:登录成功后站点会自动跳转到服务管理后台页,多次调用refresh刷新登录前的初始页面,会触发站点的会话校验机制,导致页面被重定向到登录页或拦截页,无法定位到目标元素。
- 元素定位API兼容性问题:代码中使用的
find_element_by_*是Selenium 3的旧版API,在Selenium 4及以上版本中已被正式弃用,部分驱动版本下执行该类方法会出现兼容性阻塞。
解决方法
按照如下步骤调整代码即可修复问题:
- 给undetected_chromedriver添加启动参数,解决SSL和GPU报错
- 替换固定休眠逻辑为显示等待,指定最长等待时间,只有元素加载完成后才执行后续操作
- 移除登录后多余的refresh操作,等待页面自动跳转完成后再定位元素
- 替换为Selenium 4标准的元素定位API,避免兼容性问题
修改后的可运行代码如下:
import undetected_chromedriver as uc 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 # 添加启动参数解决报错 options = uc.ChromeOptions() options.add_argument('--ignore-certificate-errors') options.add_argument('--ignore-ssl-errors') options.add_argument('--disable-gpu') options.add_argument('--no-sandbox') browser = uc.Chrome(options=options) browser.get('https://aternos.org/server/devialcraft') browser.refresh() time.sleep(1) # 登录流程 username = browser.find_element(By.ID, "user") username.clear() username.send_keys("Not_Breadbutter") time.sleep(2) password = browser.find_element(By.ID, "password") password.clear() password.send_keys("my_password") time.sleep(2) browser.find_element(By.ID, "login").click() # 初始化显示等待,最长等待15秒 wait = WebDriverWait(browser, 15) # 等待服务名称元素加载完成再点击 server_name = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div.server-name"))) server_name.click() # 等待启动按钮加载完成再点击 start_btn = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div.btn.btn-huge.btn-success"))) start_btn.click() time.sleep(9) browser.quit()
如果调整后仍然出现无响应问题,可以在登录完成后打印当前页面URL和页面源码,确认是否成功跳转到目标页面,是否被站点反爬策略拦截。
内容的提问来源于stack exchange,提问作者Bread_butter
相关产品推荐
相关产品推荐

