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
相关产品推荐
相关产品推荐

