簡體   English   中英

Selenium Remote WebDriver 在無頭模式下使用 Chrome 獲取畫布內容

[英]Selenium Remote WebDriver get canvas content using Chrome in headless mode

我正在嘗試在遠程機器上使用 Selenium WebDriver 獲取 Whatsapp QR。

我在 docker 包上使用最新版本

硒/獨立鉻:最新

關鍵是,如果我在沒有無頭的情況下嘗試以下代碼,則工作順利。

也許我的配置不正確。

有任何想法嗎?

    ChromeOptions dCap = new ChromeOptions();
    dCap.setHeadless(true);
    dCap.setCapability("platform", "LINUX");
    dCap.setCapability("version", "latest");
    dCap.addArguments("disable-infobars");
    dCap.addArguments("--start-maximized");
    dCap.addArguments("--disable-extensions");
    dCap.addArguments("--disable-gpu");
    dCap.addArguments("--window-size=1920x1080");
    dCap.addArguments("--enable-javascript");        

    String driverPath = System.getProperty("user.dir") + "/exe/chromedriver";
    System.setProperty("webdriver.chrome.driver", driverPath);

    URL rutaProxy = new URL("http://localhost:4444/wd/hub");
    WebDriver driver = new RemoteWebDriver(rutaProxy, dCap);        
    driver.get("https://web.whatsapp.com/");

    WebDriverWait espera = new WebDriverWait(driver, 20);
    espera.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector(".landing-main canvas")));
    WebElement canvas = driver.findElement(By.cssSelector(".landing-main canvas"));

    JavascriptExecutor js = (JavascriptExecutor)driver;
    String imagenBase64 = (String) js.executeScript("return arguments[0].toDataURL('image/png').substring(21);", canvas);

    //TEST
    byte[] imageByte = Base64.getDecoder().decode(imagenBase64.substring(1));
    ByteArrayInputStream bis = new ByteArrayInputStream(imageByte);
    BufferedImage image = ImageIO.read(bis);
    bis.close();

    File outputfile = new File("image.png");
    ImageIO.write(image, "png", outputfile);
    
    driver.close();

我一直在這種情況下,在一個動作和一個窗口彈出之間添加更多的時間延遲,因為一些 DOM 元素的刷新需要時間。 啟用 headless 比不啟用它需要更多的延遲。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM