使用Python Selenium点击按钮后无法在新页面执行操作的问题
问题解决:Selenium跳转新页面后无法操作的处理方案
问题场景
使用Python Selenium提取页面信息:在初始页面获取姓名、手机号(部分字段已有默认输入);点击底部Donate按钮进入新加载页面后无法执行任何操作,需实现页面滚动并点击**id为"account-tab-btn"、class为"account-section svelte-1mqsf83"**的按钮。
原代码展示
初始页面操作代码
url = "https://donations.iskconbangalore.org/mobile-donation/?patronId=13340" driver = webdriver.Chrome(executable_path=r'C:\Users\Admin\Downloads\chromedriver_win32\chromedriver') driver.get(url) name=driver.find_element(By.ID,"donorName").get_attribute("value") print(a) # 注:此处变量名错误,应为print(name) mobile=driver.find_element(By.ID,"donorMobile").get_attribute("value") print(mobile) inputamt = driver.find_element(By.ID,"O5") inputamt.send_keys('500') inputemail = driver.find_element(By.ID,"donorEmailId") inputemail.send_keys('me@me.me') radioButtons = driver.find_element(By.CLASS_NAME, "custom-control-label").click() WebDriverWait(driver, 30).until(EC.element_to_be_clickable((By.XPATH, "//button[@class='btn order-btn2 donate-now']"))).click()
新页面操作代码
time.sleep(7) driver.switch_to.window(driver.window_handles[0]) driver.get("https://donations.iskconbangalore.org/payment-gateway/") # prints windows id print(driver.window_handles) driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//button[@class='account-section svelte-1mqsf83']"))).click()
问题分析与修正方案
- 窗口切换逻辑错误:点击Donate按钮后,新页面大概率在新标签页打开,原代码切换到
window_handles[0]是回到初始窗口,应切换到最新打开的窗口window_handles[-1]。 - 无需重复调用
driver.get():跳转新页面后浏览器已加载目标页面,重复调用会导致页面刷新,干扰元素定位。 - 元素定位优化:目标按钮有明确ID
account-tab-btn,直接用ID定位比XPATH更可靠,避免class重复问题。 - 精准滚动到元素:直接滚动到目标元素位置而非页面底部,提升操作准确性。
修正后的新页面代码
# 等待新窗口加载完成 WebDriverWait(driver, 20).until(lambda d: len(d.window_handles) > 1) # 切换到新打开的窗口 driver.switch_to.window(driver.window_handles[-1]) # 等待目标按钮加载并滚动到元素位置 target_btn = WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.ID, "account-tab-btn"))) driver.execute_script("arguments[0].scrollIntoView();", target_btn) # 点击按钮 WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.ID, "account-tab-btn"))).click()
额外注意事项
- 替换
time.sleep()为WebDriverWait显式等待,避免固定等待时间导致的不稳定问题。 - 确保导入所需Selenium模块:
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
内容的提问来源于stack exchange,提问作者vigneshwaran sr
相关产品推荐
相关产品推荐

