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

Selenium+Python:点击提交后浏览器自动返回初始页的解决办法

问题描述

我尝试在页面填写信息:选择日期、球员人数、地点后点击提交。以下代码能完成这些操作,但点击提交按钮后,新页面短暂打开后立即返回原页面(所有填写字段重置,类似刷新)。试过用ActionChains按住Ctrl点击提交按钮以在新标签页打开,但未成功;也试过多种脚本暂停方式(time.sleep()、input()等),结果相同。如何让Selenium停留在新页面?

原代码:

driver = webdriver.Chrome()

driver.get("https://cityoflapcp.ezlinksgolf.com/index.html#/preSearch")

driver.find_element(By.CLASS_NAME, "preSearch-calendar-input").clear() 
driver.find_element(By.CLASS_NAME, "preSearch-calendar-input").send_keys(date_of_play) # for some reason can't do clear and send keys in one line
Select(driver.find_element(By.ID, 'pc')).select_by_visible_text(num_players)
driver.find_element(By.XPATH,"//input[@value='6171']").click()
driver.find_element(By.XPATH,"//button[@type='submit']").click()
time.sleep(10) # to keep the browser open for testing/debugging
解决方案

1. 切换到新打开的窗口/标签页

提交后页面大概率会在新窗口打开,但原窗口会自动刷新,这时候需要主动切换到新窗口:

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.XPATH,"//button[@type='submit']").click()

# 等待新窗口出现,最长等待10秒
WebDriverWait(driver, 10).until(EC.number_of_windows_to_be(2))

# 遍历所有窗口句柄,切换到新窗口
for handle in driver.window_handles:
    if handle != original_window:
        driver.switch_to.window(handle)
        break

# 等待新页面加载完成,这里以等待body元素为例
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.TAG_NAME, "body")))
# 可以加个sleep验证是否停留在新页面
time.sleep(5)

2. 拦截原页面的刷新请求

如果原页面是通过JavaScript触发的自动刷新,可通过Chrome DevTools协议拦截这个刷新请求:

# 开启Chrome的网络请求监控
driver.execute_cdp_cmd('Network.enable', {})

# 定义拦截规则:取消原页面的刷新请求
def block_refresh(request):
    target_url = "https://cityoflapcp.ezlinksgolf.com/index.html#/preSearch"
    if request['request']['url'] == target_url:
        driver.execute_cdp_cmd('Network.cancelRequest', {'requestId': request['requestId']})

# 注册拦截回调
driver.execute_cdp_cmd('Network.requestWillBeSent', {}, block_refresh)

# 继续执行原有提交流程
driver.find_element(By.XPATH,"//button[@type='submit']").click()

3. 直接获取跳转URL并访问

如果提交是AJAX异步完成后跳转,可等AJAX结束后直接获取目标URL,用driver.get()访问:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 执行提交
driver.find_element(By.XPATH,"//button[@type='submit']").click()

# 等待AJAX操作完成(需替换为页面上标识提交成功的元素)
WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "//div[contains(text(), '搜索结果')]")))

# 获取跳转后的URL并直接访问
target_url = driver.execute_script("return window.location.href")
driver.get(target_url)

内容的提问来源于stack exchange,提问作者Hostile Amigo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 07:53:17