Selenium点击元素后页面自动返回,无法获取新页面元素求助
解决Selenium点击后页面自动返回的问题
以下是几种可行的解决思路,你可以逐一尝试:
1. 更换点击触发方式
原生click()方法可能未完全触发元素绑定的事件,试试直接点击内部的img元素,或用JavaScript模拟点击:
# 方法1:点击span内的img元素 edit_img = driver.find_element(By.CSS_SELECTOR, "#FXS_edit img") edit_img.click() # 方法2:用JavaScript执行点击 edit_element = driver.find_element(By.CSS_SELECTOR, "#FXS_edit") driver.execute_script("arguments[0].click();", edit_element)
2. 模拟真实浏览器请求头
Selenium默认请求头可能被网站识别为自动化工具,添加真实的User-Agent:
from selenium.webdriver.chrome.options import Options import os chrome_options = Options() chrome_options.add_argument("--start-maximized") # 添加符合真实浏览器的User-Agent chrome_options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36") chrome_options.BinaryLocation = os.getcwd() + os.sep + "chrome.exe" + os.sep + "chrome.exe" driver = webdriver.Chrome(options=chrome_options)
3. 处理新窗口/标签页切换
如果点击后是打开新标签页而非跳转当前页面,需要手动切换窗口句柄:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 记录原窗口句柄 original_window = driver.current_window_handle # 执行点击操作 driver.find_element(By.CSS_SELECTOR, "#FXS_edit").click() # 等待新窗口出现 WebDriverWait(driver, 10).until(lambda d: len(d.window_handles) > 1) # 切换到新窗口 for handle in driver.window_handles: if handle != original_window: driver.switch_to.window(handle) break # 显式等待目标表格加载完成 table_id = WebDriverWait(driver, 15).until( EC.presence_of_element_located((By.ID, "extensions_table")) )
4. 禁用浏览器缓存
缓存异常可能导致页面自动回退,禁用缓存试试:
chrome_options.add_argument("--disable-cache") chrome_options.add_argument("--disable-application-cache") chrome_options.add_argument("--disable-offline-load-stale-cache")
5. 同步手动登录的会话状态
手动操作稳定可能因为会话包含特殊Cookie或参数,可手动登录后导出Cookie,在Selenium中导入:
# 替换为你手动登录后导出的实际Cookie cookies = [ {"name": "session_token", "value": "your_session_value", "domain": "target_domain"} ] # 先访问网站首页,再导入Cookie driver.get("http://IP Address") for cookie in cookies: driver.add_cookie(cookie) driver.refresh() # 刷新后保持会话状态 driver.find_element(By.CSS_SELECTOR, "#FXS_edit").click()
内容的提问来源于stack exchange,提问作者José Souza
相关产品推荐
相关产品推荐

