第一次用selenium时踩过的坑

先说一下selenium chrome的安装:

首先你要有chrome浏览器,而且版本要和接下来下载的chromedriver一致

下载chromedriver:https://sites.google.com/a/chromium.org/chromedriver/home

安装selenium的jar包:

  • 方法一:https://www.selenium.dev/downloads/选择对应的语言就行,我下载的是java(Download就是普通版本,Alpha Download是alpha版本,我下载的是普通版本)。

  • 方法二:maven安装
            <dependency>
                <groupId>org.seleniumhq.selenium</groupId>
                <artifactId>selenium-java</artifactId>
                <version>3.141.59</version>
            </dependency>
    

     

测试一下有没有安装成功

package javaBase;
 
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
 
public class Itest {
    public static void main(String[] args) {
 
        WebDriver driver = new ChromeDriver();
        driver.get("http://www.itest.info");
 
        String title = driver.getTitle();
        System.out.printf(title);
 
        driver.close();
    }
}

然后,可以去谷歌浏览器里安装一个selenium IDE的插件,辅助写爬虫

 

好了,接下来就是各种坑

  • jar包不完整导致的问题:

错误日志:java.lang.NoClassDefFoundError: com/google/common/collect/ImmutableMap

 这个问题真的是困扰我好久,由于一开始我是用maven安装的,网络问题导致某些jar包没下完全,但是呢,maven检查的时候由于本地仓库已经有这个包了(尽管它不完整),它就不会重新安装,所以才会一直报错。

解决方式:自己手动去下载jar包,把下图中的所有jar包都导入到项目中。

划重点!以上简单粗暴的方法,不得不说,非常好用,但是!当我打包后试图放服务器上跑时,又出错了,因为毕竟时外部导入方式,打包进去总出问题,所以经过我每个jar包依次导入尝试之后发现,其实导致这个错误的就只有一个包:guava-25.0-jre.jar。我去maven仓库找了这个版本的包放在pom.xml中,update一下之后,依旧出错,原因上面已经解释过了,那么怎么办呢?很简单,就去下载的jar包文件中找到这个包(图中的libs里面),替换掉本地仓库中的这个包就可以了。(本地仓库中它的位置可以在你的项目的maven依赖中找到,比如我的:)

  •  无头浏览器设置失败:

现象:没啥错误,就是设置了无头的模式,一运行还是会冒出来浏览器界面

找遍了各大博客、各大网页、各大知乎,终于找到了一个靠谱的回答,你猜怎么着???selenium版本太低!!

解决方式:我也不知道什么版本以上的可以,反正我之前是3.4.0不行,换成了最新版(3.141.59),完美解决~

顺便补充,chrome如何设置无头浏览器 

 //设置本地chromedriver地址
 System.setProperty("webdriver.chrome.driver", C:/chromedriver.exe");
        
 //创建无Chrome无头参数
ChromeOptions chromeOptions=new ChromeOptions();
chromeOptions.addArguments("--headless");
        
WebDriver driver = new ChromeDriver(chromeOptions);
  • 和springboot版本冲突

现象:在普通项目中使用selenium毫无问题浏览器可以正常调用 网站可以正常访问,同样的 代码放到spring boot项目中立马报错。

在普通项目中使用selenium毫无问题浏览器可以正常调用 网站可以正常访问,同样的 代码放到spring boot项目中立马报错,各种尝试百度无果,就像会不会和springboot有关系,然后就往这个方向试了一下,果不其然!!spring boot中pom.xml中的parent里面的核心jar包冲突。

解决方式:更新springboot的parent里的版本,(之前是1.5.8,更新成了2.1.1)

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.8.RELEASE</version>
        <relativePath /> 

    </parent>
  • 服务器上chrome打不开

错误日志:selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: exited abnormally

解决方式:添加设置就可以了

chromeOptions.addArgument("--disable-extensions")
chromeOptions.addArgument("--headless")
chromeOptions.addArgument("--disable-gpu")
chromeOptions.addArgument("--no-sandbox")

两天遇到这么多问题,也是佩服我自己,总算是跑通了。。。


版权声明:本文为qq_33905939原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。