解决代码:
protected void grantPermission(String permission) {
ArrayList<String> permissionList = new ArrayList<>();
permissionList.add(permission);
HashMap permissionDescriptor = new HashMap();
permissionDescriptor.put("name", permission);
permissionDescriptor.put("sysex", true);
Map uaMap = new HashMap() {{
put("permission", permissionDescriptor);
put("setting", "granted");
}};
((ChromeDriver) webDriver).executeCdpCommand("Browser.setPermission",
uaMap);
}
通过cdp设置似乎是我目前看到的唯一解!
另外附上操作剪贴板的方法(前提需要开放权限)
grantPermission("clipboard-write");
grantPermission("clipboard-read");
protected void saveStringAsTextHtmlIntoClipboardV2(String html){
logger.info("拷贝");
String insertLine = html.replaceAll("\"", "\\\\\\\"").replaceAll("\\\n", "");
String exeStr = "function setClipDataV2(str) {\n" +
" console.log(\"Writing to clipboard\"); \n" +
" var blob = new Blob([str], {type: 'text/html'});\n" +
" var item = new ClipboardItem({'text/html': blob});\n" +
" navigator.clipboard.write([item]).then(function() {\n" +
" console.log(\"Copied to clipboard successfully!\");\n" +
" }, function(error) {\n" +
" console.log(\"unable to write to clipboard. Error:\");\n" +
" console.log(error);\n" +
" })\n" +
"}; setClipDataV2(\"" + insertLine + "\")";
((JavascriptExecutor) getWebDriver()).executeScript(exeStr);
}
以上
另外附带一些selenium的资源
镜像构建
新的镜像构建
- 用
alpine apk
自带的 chromium
代替chrome
。alpine
内自带了一套 chromium
和 chromedriver
跳过selenium detection
Handle Permission Pop-ups 处理授权弹出框