All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.github.mike10004.seleniumcapture.chrome.ChromeCookiePreparer Maven / Gradle / Ivy

The newest version!
package io.github.mike10004.seleniumcapture.chrome;

import com.github.mike10004.chromecookieimplant.ChromeCookie;
import com.github.mike10004.chromecookieimplant.ChromeCookieImplanter;
import io.github.mike10004.seleniumcapture.DeserializableCookie;
import io.github.mike10004.seleniumcapture.chrome.ChromeWebDriverFactory.CookiePreparer;
import org.openqa.selenium.WebDriverException;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.file.Path;
import java.util.Collection;
import java.util.List;
import java.util.function.Supplier;
import java.util.stream.Collectors;
import java.util.stream.Stream;

import static com.google.common.base.Preconditions.checkNotNull;

/**
 * Implementation of a cookie preparer that uses the Chrome Cookie Implant extension.
 */
class ChromeCookiePreparer implements CookiePreparer {

    private static final Logger log = LoggerFactory.getLogger(ChromeCookiePreparer.class);

    private final Path scratchDir;
    private final Supplier> cookiesSupplier;
    private final transient ChromeCookieTransform chromeCookieTransform = new ChromeCookieTransform();
    private final ChromeCookieImplanter implanterClient;

    public ChromeCookiePreparer(Path scratchDir, Supplier> cookiesSupplier) {
        this(scratchDir, cookiesSupplier, new ChromeCookieImplanter());
    }

    public ChromeCookiePreparer(Path scratchDir, Supplier> cookiesSupplier, ChromeCookieImplanter implanterClient) {
        this.scratchDir = checkNotNull(scratchDir);
        this.cookiesSupplier = checkNotNull(cookiesSupplier);
        this.implanterClient = checkNotNull(implanterClient);
    }

    @Override
    public void supplementOptions(ChromeOptions options) throws IOException {
        File crxFile = File.createTempFile("chrome-cookie-implant", ".crx", scratchDir.toFile());
        try (OutputStream crxOut = new FileOutputStream(crxFile)) {
            implanterClient.copyCrxTo(crxOut);
        }
        options.addExtensions(crxFile);
    }

    @Override
    public void prepareCookies(ChromeDriver driver) throws WebDriverException {
        Stream inputCookies = cookiesSupplier.get().stream();
        List chromeCookies = inputCookies.map(chromeCookieTransform::transform).collect(Collectors.toList());
        implanterClient.implant(chromeCookies, driver);
        log.debug("{} cookies imported using implant extension", chromeCookies.size());
        driver.get("data:,"); // blank page
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy