Selenium ChromeDriver.get() UTF-8特殊字符解码异常问题(Java)
问题解决:Selenium ChromeDriver 含特殊字符URL的编码错误处理
核心问题分析
- 强制设置
--charset=UTF-8会和Chrome默认的UTF-8编码逻辑冲突,导致特殊字符(如ú)被错误解码为乱码(ú) URLEncoder.encode()是用于表单数据编码的工具,会将URL中的路径分隔符/也一并编码,破坏原始URL结构
有效解决方案
1. 移除冲突的--charset参数
Chrome默认已使用UTF-8处理URL编码,强制设置该参数反而会引发编码逻辑混乱,直接移除即可:
System.setProperty( "webdriver.chrome.driver", "C:\\Program Files\\Controllers\\chromedriver-win64\\chromedriver.exe" ); ChromeOptions options = new ChromeOptions(); // 移除--charset=UTF-8参数,恢复Chrome默认编码逻辑 WebDriver driver = new ChromeDriver(options);
2. 对URL路径分段编码
仅对包含特殊字符的路径片段单独编码,保留/等结构符号不变:
import java.net.URLEncoder; import java.nio.charset.StandardCharsets; // ... // 拆分URL,只编码含特殊字符的部分 String baseDomain = "https://www."; String encodedSegment = URLEncoder.encode("úrl", StandardCharsets.UTF_8.name()); String restPath = "/example/with/especial-character/"; String validUrl = baseDomain + encodedSegment + restPath; driver.get(validUrl);
3. 使用URI类标准编码(推荐)
利用Java原生URI类按照RFC标准自动处理URL编码,同时保留完整URL结构:
import java.net.URI; import java.net.URISyntaxException; // ... try { // 按URL结构拆分构建URI URI uri = new URI( "https", // 协议 null, // 用户信息 "www.úrl", // 域名 -1, // 端口(默认端口传-1) "/example/with/especial-character/", // 路径 null, // 查询参数 null // 锚点 ); // 转换为ASCII编码的标准URL String encodedUrl = uri.toASCIIString(); driver.get(encodedUrl); } catch (URISyntaxException e) { e.printStackTrace(); }
4. 统一Selenium依赖版本
当前依赖中selenium-support版本(3.4.0)与selenium-chrome-driver(3.141.59)不一致,可能引发兼容性问题,建议统一版本:
dependencies { testImplementation platform('org.junit:junit-bom:5.9.1') testImplementation 'org.junit.jupiter:junit-jupiter' implementation group: 'org.seleniumhq.selenium', name: 'selenium-chrome-driver', version: '3.141.59' implementation group: 'org.seleniumhq.selenium', name: 'selenium-support', version: '3.141.59' }
内容的提问来源于stack exchange,提问作者Toms_Hd3z
相关产品推荐
相关产品推荐

