Selenium:清除Chrome缓存

22

在我的应用程序中,我需要一种在注销前仅清除Chrome浏览器缓存(不包括cookies-我不想删除cookies)的方法。

有人能建议我如何点击Chrome中的“清除数据”按钮吗? 我已经编写了下面的代码,但代码无效。

配置:

Chrome版本:Version 65.0.3325.181 (官方版本) (64位)

Selenium版本:3.11.0

//Clear the cache for the ChromeDriver instance.
driver.get("chrome://settings/clearBrowserData");
Thread.sleep(10000);
driver.findElement(By.xpath("//*[@id='clearBrowsingDataConfirm']")).click();

在此输入图片描述


1
你能通过开发工具识别出xpath试验的元素吗? - undetected Selenium
13个回答

0

还有一种方法可以通过遍历阴影树来点击“清除数据”按钮。如果您尝试通过定位器策略简单搜索Web元素来查找清除数据按钮,则由于Chrome浏览器版本升级,它将无法工作。您需要遍历阴影树。您可以尝试以下代码在高级选项卡中单击“清除数据”:

package selenium.demo.test;

import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

public class Test {
static WebDriver driver;
public static void main(String[] args) {
 System.setProperty("webdriver.chrome.driver","F:\\selenium\\chromedriver.exe");
    // Instantiate a ChromeDriver class.       
 driver=new ChromeDriver();  
 driver.get("chrome://settings/clearBrowserData");
 WebElement root1 = driver.findElement(By.cssSelector("settings-ui"));
    // get 1st shadowroot element
    WebElement shadowRoot1 = expandRootElement(root1);

    // get 2nd parent
    WebElement root2 = shadowRoot1.findElement(By.cssSelector("settings-main"));
    // get 2nd shadowroot element
    WebElement shadowRoot2 = expandRootElement(root2);

    // get 3rd parent
    WebElement root3 = shadowRoot2.findElement(By.cssSelector("settings-basic-page"));
    // get 3rd shadowroot element
    WebElement shadowRoot3 = expandRootElement(root3);

    // get 4th parent
    WebElement root4 = shadowRoot3.findElement(By.cssSelector("settings-section > settings-privacy-page"));
    // get 4th shadowroot element
    WebElement shadowRoot4 = expandRootElement(root4);

    // get 5th parent
    WebElement root5 = shadowRoot4.findElement(By.cssSelector("settings-clear-browsing-data-dialog"));
    // get 5th shadowroot element
    WebElement shadowRoot5 = expandRootElement(root5);

    // get 6th parent
    WebElement root6 = shadowRoot5.findElement(By.cssSelector("#clearBrowsingDataDialog"));
    WebElement root7 = root6.findElement(By.cssSelector("cr-tabs[role='tablist']"));
    root7.click();

    WebElement clearDataButton = root6.findElement(By.cssSelector("#clearBrowsingDataConfirm"));


    clearDataButton.click(); // click that hard to reach button!
    driver.quit();

}
private static WebElement expandRootElement(WebElement element) {
    WebElement ele = (WebElement) ((JavascriptExecutor) driver)
            .executeScript("return arguments[0].shadowRoot", element);
    return ele;
}

}

0
以下代码片段导航到Chrome设置以清除浏览器数据,并向打开的对话框发送按键。然后它等待选项卡关闭。您可以轻松地手动执行这些步骤。
IWebDriver Driver = new ChromeDriver()
Driver.Navigate().GoToUrl("chrome://settings/clearBrowserData");
Driver.SwitchTo().ActiveElement();
Driver.FindElement(By.XPath("//settings-ui")).SendKeys(Keys.Enter);
var wait = new WebDriverWait(Driver, TimeSpan.FromSeconds(30));
wait.Until(wd => wd.Url.StartsWith("chrome://settings"));

@ItamarMushkin 这段代码片段导航到Chrome设置以清除浏览器数据,并向打开的对话框发送按键。然后它等待选项卡关闭。您可以轻松地手动执行这些步骤。 - Pierre
不要,在回答中只返回翻译的文本。请勿在注释中添加说明(在此之后,我们可以删除整个注释讨论)。 - Itamar Mushkin

-1

收到NoSuchElement异常:

driver = new ChromeDriver(service, chromeOption());
        driver.manage().deleteAllCookies();
        driver.get("chrome://settings/clearBrowserData");
        staticWait(5);
        driver.switchTo().activeElement();
        driver.findElement(By.cssSelector("* /deep/ #clearBrowsingDataConfirm")).click();

Chrome 版本:97.0.4692.71


1
请在答案部分仅发布答案。如果您想提问,请将其作为新问题发布。谢谢。 - Ferro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接