Selenium ChromeDriver.get() 未正确添加特殊字符 UTF 8 解码 Java

Selenium ChromeDriver.get() does not correctly add special characters UTF 8 decoding Java

提问人:Toms_Hd3z 提问时间:8/2/2023 更新时间:8/2/2023 访问量:172

问:

我使用 selenium 版本:“3.141.59”通过 java 访问页面的内容,我正在使用 ChromeDriver 模拟 Web 浏览器的使用,当查询 url 包含特殊字符 --charset=utf -8 时会出现问题,因为它解码了字符并且 Web 请求的结果不符合预期, 下面是一个代码示例:

System.setProperty(
      "webdriver.chrome.driver",
      "C:\\Program Files\\Controllers\\chromedriver-win64\\chromedriver.exe"
 ); // -> chromedriver version 115.0.5790.102 
ChromeOptions options = new ChromeOptions();
options.addArguments("--charset=UTF-8");
WebDriver driver = new ChromeDriver(options);
driver.get("úrl/example/with/especial-character/"); // -> url: https://www.úrl/example/with/especial-character/

我尝试使用以下方法对 url 进行编码:

String encoderUrl = URLEncoder.encode("úrl/example/with/especial-character/", "UTF-8");
driver.get(encodeUrl)

但是这修改了已经编码的 url,所以我不知道如何解决这个问题,有什么有用的方法或库可以解决这个问题吗?

dependencies {
    testImplementation platform('org.junit:junit-bom:5.9.1')
    testImplementation 'org.junit.jupiter:junit-jupiter'
    // https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-chrome-driver
    implementation group: 'org.seleniumhq.selenium', name: 'selenium-chrome-driver', version: '3.141.59'
    // https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-support
    implementation group: 'org.seleniumhq.selenium', name: 'selenium-support', version: '3.4.0'
}

java 硒-web驱动程序 UTF-8 硒4

评论

0赞 g00se 8/2/2023
// -> 网址:https://www。úrl/example/with/especial-character/ 请原谅我,我不做硒,但我认为这就是你所看到的?如果是这样,在哪里 - 在控制台中?如果是这样,哪个控制台?
0赞 Toms_Hd3z 8/2/2023
这就是 ChromeDriver 处理程序查询网页的方式,导致它返回的内容出错。
0赞 pcalkins 8/2/2023
我相信 get() 方法有一个内置的 URL 验证器。但是我认为 URL 只能包含标准的 ASCII 字符,因此整个问题似乎都基于一个不存在的 URL。
0赞 g00se 8/2/2023
这就是 ChromeDriver 处理程序查询网页的方式,导致它返回的内容出错。这并不能告诉我你在哪里看到不正确的输出
1赞 g00se 8/2/2023
对不起,帮不上忙。我以为它可能只是在控制台中

答:

0赞 undetected Selenium 8/2/2023 #1

Selenium v3.141.59 现在很古老


但是,使用 WebDriver v4.10.0,我发现特殊字符就像手动访问一样相似。

网址

https://www.úrl/example/with/especial-character/

手动浏览器快照:

manual

代码块:

ChromeOptions options = new ChromeOptions();
options.addArguments("--start-maximized");
WebDriver driver = new ChromeDriver(options);
driver.get("https://www.úrl/example/with/especial-character/");

浏览器快照:

SeleniumDriven

0赞 Toms_Hd3z 8/2/2023 #2

我已经设法解决了这个问题,ChromeDriver 没有在内部更改我的字符编码,我使用的 url 是从枚举类导出的,而我使用的 IDE (intellij IDEA) 没有在 utf-8 中编码我的文件,所以当收到类中的值时,字符串的字符被替换, 就像做一样简单:

     byte[] asciiURL = url.getBytes();
     String utf8URL = new String(asciiURL, StandardCharsets.UTF_8);

有了这个就足够了。