selenium:无法在linux上找到浏览器二进制文件

n7taea2i  于 2021-06-29  发布在  Java
关注(0)|答案(2)|浏览(488)

我目前正在尝试使用selenium在linux上自动执行一些浏览任务(我运行的是linuxmint20)。然而,我遇到了一堵墙:我无法让它定位任何浏览器二进制文件。我试过使用firefox和chromium(我想如果我能加载chromium二进制文件,我就可以接受),但是它们都产生相同的结果,selenium说它找不到浏览器二进制文件。
这是我的密码:

package test1;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

public class app
{
    public static void main(String[] args)
    {
        System.setProperty("webdriver.firefox.driver", "/home/ann/bin/geckodriver");
        WebDriver driver = new FirefoxDriver();
    }
}

以下是运行代码时的结果:

Exception in thread "main" org.openqa.selenium.WebDriverException: Cannot find firefox binary in PATH. Make sure firefox is installed. OS appears to be: LINUX
Build info: version: '4.0.0-alpha-7', revision: 'de8579b6d5'
System info: host: 'ann-System-Product-Name', ip: '127.0.1.1', os.name: 'Linux', os.arch: 'amd64', os.version: '5.4.0-58-generic', java.version: '11.0.8'
Driver info: driver.version: FirefoxDriver
    at org.openqa.selenium.firefox.FirefoxBinary.<init>(FirefoxBinary.java:95)
    at java.base/java.util.Optional.orElseGet(Optional.java:369)
    at org.openqa.selenium.firefox.FirefoxOptions.getBinary(FirefoxOptions.java:199)
    at org.openqa.selenium.firefox.GeckoDriverService$Builder.withOptions(GeckoDriverService.java:180)
    at org.openqa.selenium.firefox.FirefoxDriver.toExecutor(FirefoxDriver.java:207)
    at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:177)
    at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:155)
    at test1.app.main(app.java:10)
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

firefox已安装,可以从终端执行:

ann@ann-System-Product-Name:~$ whereis firefox
firefox: /usr/bin/firefox /usr/lib/firefox /etc/firefox

壁虎河在我的房间里 $PATH 执行它会得到以下结果:

ann@ann-System-Product-Name:~$ geckodriver
1609693404322   geckodriver INFO    Listening on 127.0.0.1:4444
ibrsph3r

ibrsph3r1#

System.setProperty("webdriver.gecko.driver", "C:\\Users\\prave\\Downloads\\geckodriver.exe");
    File pathBinary = new File("C:\\Program Files\\Mozilla Firefox\\firefox.exe");
    FirefoxBinary firefoxBinary = new FirefoxBinary(pathBinary);   

    FirefoxOptions options = new FirefoxOptions();
    options.setBinary(firefoxBinary);
    FirefoxDriver firefox=new FirefoxDriver(options);

system.setproperty(“webdriver.firefox.driver”,“/home/ann/bin/geckodriver”);设置gekodriver路径而不是firefox.exe路径。你可以使用上面的代码
也不是webdriver.firefox.driver而是webdriver.gecko.driver

laik7k3q

laik7k3q2#

geckodriver/火狐

在linux平台上,firefox二进制文件的默认位置为:

/usr/bin/firefox

如果firefox安装在默认位置,您只需:

System.setProperty("webdriver.gecko.driver", "/home/ann/bin/geckodriver");
WebDriver driver = new FirefoxDriver();

但是,某些linux发行版的默认位置可能会有所不同。在这些情况下,如果firefox安装在自定义位置,您必须:

System.setProperty("webdriver.gecko.driver", "/home/ann/bin/geckodriver");
FirefoxOptions options = new FirefoxOptions();
options.setBinary("/path/to/firefox");
WebDriver driver =  new FirefoxDriver(options);
driver.get("https://stackoverflow.com");

您可以在webdriverexception中找到相关的详细讨论:无法使用geckodriver firefox和selenium java连接到二进制firefoxbinary(c:\program files\mozilla firefox\firefox.exe)

铬驱动/铬

同样,在linux平台上,chrome二进制文件的默认位置是:

/usr/bin/google-chrome

如果在默认位置安装了google chrome,您只需:

System.setProperty("webdriver.chrome.driver", "/home/ann/bin/chromedriver");
WebDriver driver = new ChromeDriver();

但是,某些linux发行版的默认位置可能会有所不同。在这些情况下,如果chrome安装在自定义位置,您必须:

System.setProperty("webdriver.chrome.driver", "/home/ann/bin/chromedriver");
ChromeOptions options = new ChromeOptions();
options.setBinary("/path/to/chrome");
WebDriver driver =  new ChromeDriver(options);
driver.get("https://stackoverflow.com");

您可以在chromedriver的默认位置和在windows上安装chrome的位置中找到相关的详细讨论
注意:如果您使用的是geckodriver/firefox组合,而不是 webdriver.firefox.driver 你必须使用 webdriver.gecko.driver

相关问题