使用Selenium自动化LinkedIn分享时遇WebDriverException错误求助
解决LinkedIn使用Selenium执行JS时的Content Security Policy错误
嘿,这个问题我之前也碰到过,是LinkedIn的Content Security Policy (CSP) 限制在搞事情!它的CSP规则里没允许unsafe-eval,而你原来用字符串形式传入JS代码的方式,会被浏览器判定为eval类的执行操作,直接触发了这个限制,所以才抛出了那个错误。
给你几个实用的解决办法:
1. 直接操作WebElement,避免字符串形式的JS查找
不要在JS代码里写元素查找逻辑,而是先通过Selenium找到目标元素,再把它作为参数传给executeScript,直接操作这个元素。修改后的代码如下:
WebElement ele = driver.findElement(By.cssSelector(".sharing-create-share-view__create-content>button")); ele.click(); String content = shareContent[new Random().nextInt(shareContent.length)]; // 先通过Selenium定位到编辑框元素 WebElement editorEle = driver.findElement(By.cssSelector(".mentions-texteditor__contenteditable")); // 将元素和内容作为参数传入JS,直接操作 JavascriptExecutor js = (JavascriptExecutor) driver; js.executeScript("arguments[0].innerHTML = '<p>' + arguments[1] + '<br></p>';", editorEle, content); MyWebDriverUtils.mySleep(1, 1); driver.findElement(By.cssSelector(".sharing-share-box__post-button")).click();
2. 为什么这个方法有效?
当你把WebElement作为arguments传给executeScript时,Selenium会直接引用DOM中已定位的元素,不需要在JS代码里执行字符串形式的查找逻辑,这种方式完全不会触发CSP的unsafe-eval限制,同时还避免了字符串拼接可能带来的转义错误(比如内容里有引号的情况)。
3. 额外的优化建议
- 尽量升级你的Selenium版本到
3.141.59或更高,你当前用的3.4.0版本太老旧了,存在不少兼容性问题 - 考虑放弃PhantomJS,它已经停止维护了,对现代网站的CSP和JS特性支持很差,换成ChromeDriver或者FirefoxDriver会稳定很多
- 避免用字符串拼接生成JS代码,这种写法不仅容易触发安全限制,还可能引入难以排查的语法错误
内容的提问来源于stack exchange,提问作者何子洋
相关产品推荐
相关产品推荐

