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

如何在Selenium/Python中遍历网页随机数量的Change链接并执行操作

处理多个Change请求链接的遍历方案

当然可以通过遍历的方式搞定所有Change链接!你只需要把原来获取单个元素的find_element_by_xpath改成获取元素列表的find_elements_by_xpath,然后循环遍历每个链接执行相同操作就行。这里给你调整后的代码,还加上了一些细节处理(比如切换回原窗口、关闭新标签等,避免窗口句柄混乱):

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

# 先点击Source Control菜单(保留你的原逻辑)
source_control = driver.find_element_by_xpath('//li[@class="menu-item"]/a[contains(.,"Source Control")]')
source_control.click()

# 等待页面加载完成,获取所有Change链接元素(用find_elements复数形式)
wait = WebDriverWait(driver, 10)
change_links = wait.until(EC.presence_of_all_elements_located(
    (By.XPATH, '//td[@class="confluenceTd"]/a[contains(.,"Change: ")]')
))

# 保存原窗口句柄,方便后续切回
original_window = driver.current_window_handle

# 遍历每个Change链接
for link in change_links:
    # 获取链接地址
    test_value = link.get_attribute('href')
    # 在新标签页打开链接
    driver.execute_script("window.open(arguments[0])", test_value)
    # 切换到最新打开的标签页
    driver.switch_to.window(driver.window_handles[-1])
    
    # ---------- 这里放你要在新标签页执行的操作 ----------
    # 比如打印标题、填写表单等业务逻辑
    print(f"正在处理Change链接:{test_value}")
    
    # 操作完成后,关闭当前标签页
    driver.close()
    # 切回原窗口,准备处理下一个链接
    driver.switch_to.window(original_window)

关键细节说明:

  • 用find_elements_by_xpath(结合WebDriverWait的等待方法)获取所有匹配的Change链接,返回一个元素列表,不管数量是1个还是5个都能覆盖。
  • 提前保存原窗口句柄original_window,每次处理完新标签后切回去,避免后续找不到原页面的元素。
  • 用driver.window_handles[-1]切换到最新打开的标签页,因为window_handles是按打开顺序排列的列表,最后一个就是刚打开的标签。
  • 操作完成后关闭新标签并切回原窗口,保证循环的稳定性,不会出现窗口句柄混乱的问题。

如果你的业务逻辑不需要关闭新标签,也可以保留,但要注意窗口句柄会逐渐增多,需要额外处理切换逻辑。另外加入WebDriverWait是为了确保页面加载完成后再获取元素,避免出现元素未加载的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:40:05