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

如何在Selenium WebDriver中实现从Excel加载多URL的循环执行

批量循环访问URL并执行重复操作(Selenium Java实现)

嘿,结合你给出的代码片段和需求(处理500个URL,每个页面执行相同操作),我整理了一个完整的可运行方案,还加了适合大量URL场景的实用优化:

核心思路

把500个URL存到外部文本文件(比硬编码在代码里好维护太多),然后用循环逐个打开,在每个页面执行你的自定义操作,同时加入异常处理避免单个URL出错导致整个流程中断。

完整代码实现

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.By;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.time.Duration;

public class LoadPages {
    private WebDriver driver;
    // 把URL存到这个文本文件里,每行一个URL,方便维护500条数据
    private static final String URL_FILE_PATH = "D://WorkSpace/myproject/urls.txt";

    public static void main(String[] args) {
        LoadPages pageLoader = new LoadPages();
        pageLoader.initDriver();
        List<String> urlList = pageLoader.loadUrls();
        pageLoader.processAllUrls(urlList);
        pageLoader.cleanup();
    }

    // 初始化浏览器驱动(这里用Chrome,你可以换成Firefox/Edge等)
    private void initDriver() {
        // 替换成你的浏览器驱动路径
        System.setProperty("webdriver.chrome.driver", "path/to/your/chromedriver.exe");
        driver = new ChromeDriver();
        driver.manage().window().maximize();
        // 设置全局隐式等待,避免页面元素未加载完成就操作
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));
    }

    // 从文本文件加载所有URL
    private List<String> loadUrls() {
        List<String> urls = new ArrayList<>();
        try (BufferedReader br = new BufferedReader(new FileReader(URL_FILE_PATH))) {
            String line;
            while ((line = br.readLine()) != null) {
                // 跳过空行和注释行(如果有的话)
                String trimmedLine = line.trim();
                if (!trimmedLine.isEmpty() && !trimmedLine.startsWith("#")) {
                    urls.add(trimmedLine);
                }
            }
        } catch (IOException e) {
            System.err.println("加载URL文件失败:" + e.getMessage());
            e.printStackTrace();
        }
        return urls;
    }

    // 核心循环:逐个处理URL
    private void processAllUrls(List<String> urlList) {
        WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(15));
        
        for (String url : urlList) {
            try {
                // 打开当前URL
                driver.get(url);
                System.out.println("正在处理:" + url);

                // --------------------------
                // 这里替换成你要执行的相同操作,比如:
                // 等待某个元素可见后点击
                // wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("target-button"))).click();
                // 提取页面标题
                // String pageTitle = driver.getTitle();
                // 填写表单
                // driver.findElement(By.name("username")).sendKeys("test");
                // --------------------------

                // 可选:如果操作需要短暂等待,用显式等待代替Thread.sleep更稳定
                // wait.until(ExpectedConditions.titleContains("页面关键词"));
            } catch (Exception e) {
                // 单个URL出错不中断整个循环,只记录日志
                System.err.println("处理URL [" + url + "] 时出错:" + e.getMessage());
                // 可以把错误日志写到文件里,方便后续排查
                // e.printStackTrace();
            }
        }
    }

    // 清理资源,关闭浏览器
    private void cleanup() {
        if (driver != null) {
            driver.quit();
            System.out.println("所有URL处理完成,浏览器已关闭");
        }
    }
}

实用优化说明

  • URL易维护:把500个URL放在文本文件里,每行一个,新增/删除/修改都不用改代码
  • 稳定的等待机制:用WebDriverWait显式等待代替硬编码的Thread.sleep(),适配不同页面的加载速度
  • 异常容错:单个URL处理出错时,只会记录日志,不会中断整个循环,保证500个URL都能被处理
  • 资源清理:最后自动关闭浏览器,避免残留进程占用系统资源

注意事项

  • 确保浏览器驱动版本和你的浏览器版本完全匹配(比如ChromeDriver要对应Chrome的版本)
  • 如果需要保持登录状态,可以在initDriver()之后、循环之前先完成登录操作,Selenium会自动保持会话
  • 如果URL数量特别多,可以考虑加入日志文件输出,方便后续查看哪些URL处理失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:41:07