引用部分:
1.
2.用到的程序包
配置部分:
ChromeDriverService driverService = ChromeDriverService.CreateDefaultService();
driverService.HideCommandPromptWindow = true;//关闭黑色cmd窗口
ChromeOptions options = new ChromeOptions();
//取消 chrome正受到自动测试软件的控制的信息栏
options.AddExcludedArgument("enable-automation");
options.AddAdditionalCapability("useAutomationExtension", false);
//禁用浏览器的保存密码选项
options.AddUserProfilePreference("credentials_enable_service", false);
//禁用浏览器弹窗(貌似不管用)
options.AddUserProfilePreference("profile.default_content_setting_values.notifications", 2);
// 不显示浏览器
//options.AddArgument("--headless");
// GPU加速可能会导致Chrome出现黑屏及CPU占用率过高,所以禁用
options.AddArgument("--disable-gpu");
// 伪装user-agent
options.AddArgument("user-agent=Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) CriOS/56.0.2924.75 Mobile/14E5239e Safari/602.1");
//隐身模式(无痕模式)
options.AddArgument("--incognito");
// 设置chrome启动时size大小
options.AddArgument("--window-size=414,736");
// 禁用图片
options.AddUserProfilePreference("profile.default_content_setting_values.images", 2);
//指定浏览器配置目录
// string str = System.Environment.CurrentDirectory+ "\\selenium\\AutomationProfile";
// options.AddArgument(@"--user-data-dir="+ str);
//指定使用本地浏览器
options.BinaryLocation = "本地浏览器路径";
IWebDriver webDriver = new ChromeDriver(driverService,options);
//Selenium事件驱动
EventFiringWebDriver eventDriver = new EventFiringWebDriver(webDriver);
//如果查找元素在5S内还没有找到
eventDriver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(5);
//为Selenium添加事件
eventDriver = new EventFiringWebDriver(webDriver);
eventDriver.Navigating += EventDriver_Navigating;//导航前
eventDriver.Navigated += EventDriver_Navigated;//导航后
string url = "https://www.baidu.com";
eventDriver.Navigate().GoToUrl(url);
↓↓↓↓↓↓↓↓需要什么事件,这边自己慢慢找↓↓↓↓↓↓↓↓
提示:这边的事件只有在使用eventDriver的进行的操作才会触发,如果你是手动操作的,那么这边的事件是不会被触发的
模拟鼠标在指定元素悬停
//模拟鼠标在指定元素悬停
Actions action = new Actions(eventDriver);
var mouserOverlogin = action.MoveToElement(eventDriver.FindElement(By.Id("js_N_nav_login_title"))).Build(); ;
mouserOverlogin.Perform();
如果要点击的元素被其他元素遮挡,报异常,可以用这种方法来点击
var element = webDriver.FindElement(By.Id("mybutton")); //点击写信
((IJavaScriptExecutor)webDriver).ExecuteScript(@"arguments[0].click()", element);
执行JS(将滚动条拉到底部):
//老版执行JS方法
//((IJavaScriptExecutor)webDriver).ExecuteScript("window.scrollTo(0, document.body.scrollHeight)");
//事件驱动执行JS方法
eventDriver.ExecuteScript("window.scrollTo(0, document.body.scrollHeight)");
获取标签(以多Class为例):
ReadOnlyCollection<IWebElement> elements = eventDriver.FindElements(By.CssSelector("[class='item goWork']"));
切换标签页面(eventDriver无法监控当前是在哪个标签页,只能自己SwitchTo)
foreach (string eventDriverWindowHandle in eventDriver.WindowHandles)
{
eventDriver.SwitchTo().Window(eventDriverWindowHandle);
if (eventDriver.Title == "云筑优选-商品详情")
{
downImg();
break;
}
}
退出同时关闭驱动
private void Form1_FormClosing(object sender, FormClosingEventArgs e) {
if (eventDriver!=null){
//窗口关闭前记得浏览器,否则驱动会残留在进程里面
eventDriver.Quit();
}
}