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

Java 11+Selenium+ChromeDriver 116无法打开指定页面求助

问题解决:Selenium ChromeDriver打开中远海运船期页面被拦截

环境信息

  • Java 11
  • Selenium
  • ChromeDriver 版本:116.0.5845.96
  • 目标页面:https://elines.coscoshipping.com/ebusiness/sailingSchedule/searchByCity

问题描述

使用现有ChromeDriver初始化代码打开目标页面时,触发网站反爬拦截,出现异常页面(页面显示验证拦截提示,无法正常访问船期查询功能)。

现有初始化代码

private void initBrowserSeleniumChrome() {

System.setProperty("webdriver.chrome.driver", CHROMEDRIVER);
System.setProperty("webdriver.chrome.logfile", CHROMEDRIVER_LOG_PATH);

ChromeOptions options = new ChromeOptions();

options.addArguments("--no-sandbox"); 
options.setExperimentalOption("useAutomationExtension", false);
options.setExperimentalOption("excludeSwitches", new String[]{"enable-automation"});
options.addArguments("--disable-infobars"); // disabling infobars
options.addArguments("--disable-gpu"); // applicable to windows os only
options.addArguments("--disable-dev-shm-usage"); // overcome limited resource problems
options.addArguments("--disable-popup-blocking");
options.setAcceptInsecureCerts(true);

driver_chrome = new ChromeDriver(options);
driver_chrome.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
driver_chrome.manage().timeouts().pageLoadTimeout(20, TimeUnit.SECONDS);
Dimension dmn = new Dimension(1280, 1024);
driver_chrome.manage().window().setSize(dmn);
}

// 全局驱动实例
public static WebDriver driver_chrome;

解决方案

1. 增强ChromeOptions反检测配置

网站通过检测浏览器的自动化特征拦截请求,需添加更多模拟真实用户浏览器的参数:

private void initBrowserSeleniumChrome() {
    // 若使用WebDriverManager可省略以下两行系统属性配置
    System.setProperty("webdriver.chrome.driver", CHROMEDRIVER);
    System.setProperty("webdriver.chrome.logfile", CHROMEDRIVER_LOG_PATH);

    ChromeOptions options = new ChromeOptions();

    // 保留原有参数
    options.addArguments("--no-sandbox"); 
    options.setExperimentalOption("useAutomationExtension", false);
    options.setExperimentalOption("excludeSwitches", new String[]{"enable-automation"});
    options.addArguments("--disable-infobars");
    options.addArguments("--disable-gpu");
    options.addArguments("--disable-dev-shm-usage");
    options.addArguments("--disable-popup-blocking");
    options.setAcceptInsecureCerts(true);

    // 添加反检测关键参数
    options.addArguments("--disable-blink-features=AutomationControlled"); // 屏蔽自动化检测标识
    options.addArguments("--start-maximized"); // 模拟真实用户最大化窗口
    // 设置真实浏览器User-Agent,可替换为你当前Chrome的UA
    options.addArguments("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36");
    options.addArguments("--enable-javascript"); // 确保JavaScript启用

    driver_chrome = new ChromeDriver(options);
    // 移除navigator.webdriver标识
    driver_chrome.executeScript("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})");

    driver_chrome.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
    driver_chrome.manage().timeouts().pageLoadTimeout(20, TimeUnit.SECONDS);
    // 直接最大化窗口替代固定尺寸
    driver_chrome.manage().window().maximize();
}

2. 验证Chrome浏览器与Driver版本完全匹配

确保本地安装的Chrome浏览器版本为116.0.5845.x,版本不匹配会导致驱动兼容性问题,进而触发网站拦截。

3. 使用WebDriverManager自动管理驱动(推荐)

手动配置驱动路径易出错,引入WebDriverManager可自动下载匹配当前Chrome版本的驱动:

  • 添加Maven依赖:
<dependency>
    <groupId>io.github.bonigarcia</groupId>
    <artifactId>webdrivermanager</artifactId>
    <version>5.5.3</version>
</dependency>
  • 修改初始化代码,移除System.setProperty("webdriver.chrome.driver", CHROMEDRIVER);,添加:
WebDriverManager.chromedriver().setup();

4. 添加显式等待确保页面加载完成

替换隐式等待为显式等待,等待页面核心元素加载后再进行操作:

// 打开页面后,等待搜索框加载完成(示例元素,需根据实际页面调整)
WebDriverWait wait = new WebDriverWait(driver_chrome, Duration.ofSeconds(30));
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("searchInput")));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 15:22:46