Selenium - Java - Chrome在Headless时不使用提供的用户数据目录

dsf9zpds  于 2022-12-06  发布在  Go
关注(0)|答案(1)|浏览(178)

我正在尝试使用Selenium 4.1.3Chrome 100Java 18运行一些测试。测试需要使用特定的Chrome配置文件。
我的代码在Chrome有标题的情况下可以正常工作,但在没有标题的情况下就不工作了**(不使用指定的Chrome配置文件)**。
我的代码如下(有一个布尔标志 headless,改变值使程序运行headed vs. headless -和工作vs.不工作):

public static void main(String[] args) {
    try {
        System.setProperty("webdriver.chrome.driver", "chromedriver.exe");
        //System.setProperty("webdriver.chrome.verboseLogging", "false");

        ChromeOptions options = new ChromeOptions();
        options.addArguments("--window-size=1920,1080");
        options.addArguments("--start-maximized");
        options.addArguments("start-maximized");
        boolean headless = true;
        if (headless) {
            options.addArguments("--headless");
            options.addArguments("--remote-debugging-port=9222");
        //options.setHeadless(true);
            options.setAcceptInsecureCerts(true);
        }
        options.addArguments("--log-level=3");
        options.addArguments("--silent");
        options.addArguments("no-sandbox");
        options.addArguments("--no-sandbox");

        options.addArguments("enable-automation");
        options.addArguments("--disable-infobars");
        options.addArguments("--disable-dev-shm-usage");
        options.addArguments("--disable-gpu");
        options.addArguments("--disable-custom-jumplist");
        options.addArguments("--allow-no-sandbox-job");
        options.addArguments("--lang=it-IT");
        String userData = "C:\\Chrome\\fravotto19750619\\";
        options.addArguments("--user-data-dir=" + userData);
        //String profileDir = "";
        //chromiumOptions.addArguments("--profile-directory=" + profileDir);

        ChromiumDriver driver = new ChromeDriver(options);
        driver.navigate().to("https://www.gmail.com");
        String fileName = "test.jpeg";
        try {
            File src = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
            File dst = new File(fileName);
            try (InputStream in = new FileInputStream(src)) {
                try (OutputStream out = new FileOutputStream(dst)) {
                    byte[] buffer = new byte[1024];
                    int len;
                    while ((len = in.read(buffer)) > 0) {
                        out.write(buffer, 0, len);
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        in.readLine();
        driver.quit();
        System.exit(0);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

我试着玩选项(做了很多尝试),在类似的线程中,我没有找到任何解决方案,我假设相同的代码应该在有头或无头时运行类似,但有一种差异,我找不到。
有什么想法吗?
谢谢

ctrmrzij

ctrmrzij1#

还有一个信息:看起来如果我创建了一个配置文件从headless chrome (我刚刚做了一些网页抓取的网站上,我想登录),然后它是保持如果我再次运行程序.看起来,headed和headess配置文件不互相交谈,即使看起来工作在相同的方式(或几乎在相同的方式).

相关问题