Selenium如何使用chromedriver和C#清除缓存
本文关键字:清除 缓存 chromedriver 何使用 Selenium | 更新日期: 2023-09-27 17:56:48
我找到了Java示例,这些示例解释了清除缓存非常简单:
示例代码:
System.setProperty("webdriver.chrome.driver","drivers/chromedriver.exe");
DesiredCapabilities capabilities = DesiredCapabilities.chrome();
capabilities.setCapability(CapabilityType.ForSeleniumServer.ENSURING_CLEAN_SESSION, true);
ChromeOptions opts = new ChromeOptions();
opts.addArguments("start-maximized");
capabilities.setCapability(ChromeOptions.CAPABILITY, opts);
WebDriver driver = new ChromeDriver(capabilities);
driver.manage().deleteAllCookies();
driver.get("http://www.google.com");
System.out.println(driver.getTitle());
driver.quit();
我试图在 C# 4.6 和 Selenium WebDriver 2.45 中做同样的事情,但 DesiredCapabilities 不包含用于ENSURING_CLEAN_SESSION的枚举或字符串。我不明白为什么 C# 版本没有与 java 版本相同的可用选项。我的预感是有一个技巧,例如直接使用一个字符串来表示与 java 中可用的相同功能作为枚举,我只是不确定它是什么。
这是我的代码:
SetCapability(..) 方法调用毫无意义...
var chromeDriverService = ChromeDriverService.CreateDefaultService();
chromeDriverService.HideCommandPromptWindow = true;
DesiredCapabilities capabilities = DesiredCapabilities.Chrome();
capabilities.SetCapability(ChromeOptions.Capability, true); // ? can't set ENSURING_CLEAN_SESSION, intellisense shows it does not exist
var options = new ChromeOptions();
options.AddArguments("test-type");
return new ChromeDriver(chromeDriverService, options);
您只需强制 chrome 以隐身模式启动即可
capabilities.SetCapability("chrome.switcher", new [] {"--incognito"});
public static void clearCache(this ChromeDriver driver)
{
string cmd = @"@ECHO OFF & CD %temp% & FOR /d %D IN (*) DO RD /s /q ""%D"" & DEL /F /Q *";
ExecuteCommand(cmd);
driver.Navigate().GoToUrl("chrome://settings/clearBrowserData");
ShadowRoot shadowRoot1 = driver.getShadowRootElement(By.CssSelector("settings-ui"));
ShadowRoot shadowRoot2 = driver.getShadowRootElement(shadowRoot1.FindElement(By.CssSelector("settings-main")));
ShadowRoot shadowRoot3 = driver.getShadowRootElement(shadowRoot2.FindElement(By.CssSelector("settings-basic-page")));
ShadowRoot shadowRoot4 = driver.getShadowRootElement(shadowRoot3.FindElement(By.CssSelector("settings-section > settings-privacy-page")));
ShadowRoot shadowRoot5 = driver.getShadowRootElement(shadowRoot4.FindElement(By.CssSelector("settings-clear-browsing-data-dialog")));
IWebElement root6 = shadowRoot5.FindElement(By.CssSelector("#clearBrowsingDataDialog"));
IWebElement root2 = root6.FindElement(By.CssSelector("iron-pages#tabs")).FindElement(By.CssSelector("settings-dropdown-menu#clearFromBasic"));
ShadowRoot shadowRoot7 = driver.getShadowRootElement(root2);
IWebElement ddnTimeRange = shadowRoot7.FindElement(By.CssSelector("select#dropdownMenu"));
new SelectElement(ddnTimeRange).SelectByValue("4");
IWebElement clearDataButton = root6.FindElement(By.CssSelector("#clearBrowsingDataConfirm"));
clearDataButton.Click(); // click that hard to reach button!
}
public static IJavaScriptExecutor Scripts(this IWebDriver driver)
{
return (IJavaScriptExecutor)driver;
}
private static void ExecuteCommand(string Command)
{
ProcessStartInfo ProcessInfo;
ProcessInfo = new ProcessStartInfo("cmd.exe", "/K " + Command);
ProcessInfo.CreateNoWindow = true;
ProcessInfo.UseShellExecute = true;
ProcessInfo.WindowStyle = ProcessWindowStyle.Hidden;
Process.Start(ProcessInfo);
}
private static ShadowRoot getShadowRootElement(this IWebDriver driver, By by)
{
IWebElement element = driver.FindElement(by);
return (ShadowRoot)driver.Scripts().ExecuteScript("return arguments[0].shadowRoot", element);
}
private static ShadowRoot getShadowRootElement(this IWebDriver driver, IWebElement element)
{
return (ShadowRoot)driver.Scripts().ExecuteScript("return arguments[0].shadowRoot", element);
}