You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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()

问题分析与修正方案

  1. 窗口切换逻辑错误:点击Donate按钮后,新页面大概率在新标签页打开,原代码切换到window_handles[0]是回到初始窗口,应切换到最新打开的窗口window_handles[-1]。
  2. 无需重复调用driver.get():跳转新页面后浏览器已加载目标页面,重复调用会导致页面刷新,干扰元素定位。
  3. 元素定位优化:目标按钮有明确IDaccount-tab-btn,直接用ID定位比XPATH更可靠,避免class重复问题。
  4. 精准滚动到元素:直接滚动到目标元素位置而非页面底部,提升操作准确性。

修正后的新页面代码

# 等待新窗口加载完成
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 02:30:59