目的
ChromeをC# + selenium からキックしてみる
OpenQA.Selenium.Support.UI.ExpectedConditions method is now deprecatedに対しては
SeleniumExtras.WaitHelpers.ExpectedConditionsで書き換えて対応してみる
※サイトの作成された時期によって修正の量が違うと思われる・・・・
PythonでのWebDriverWaitは
element=WebDriverWait(driver,10).until(EC.presence_of_element_located((By.TagName,'h3')))
を書き換えると以下になるのかいな??
WebDriverWaitwait=newWebDriverWait(driver,TimeSpan.FromSeconds(10));IWebElementfirstResult=wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementExists(By.TagName("h3")));
追加パッケージ
.NETFramework 4.5でプロジェクトを作成後
プロジェクト -> NuGetパッケージの管理より以下を追加する
Selenium.WebDriver
Selenium.WebDriver.Chrome
DotNetSeleniumExtras.WaitHelpers
サンプルコード
Seleniumブラウザー自動化プロジェクトのCS版を書き換えてみる
usingOpenQA.Selenium;usingOpenQA.Selenium.Chrome;usingOpenQA.Selenium.Support.UI;usingSeleniumExtras.WaitHelpers;privatevoidbtnChrome_Click(objectsender,EventArgse){varoptions=newChromeOptions();options.AddArgument("--headless");IWebDriverdriver=newChromeDriver(options);try{WebDriverWaitwait=newWebDriverWait(driver,TimeSpan.FromSeconds(10));//Webページを開くdriver.Navigate().GoToUrl("https://www.google.co.jp");//検索ボックスに検索ワードを入力IWebElementel=wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementExists(By.Name("q")));driver.FindElement(By.Name("q")).SendKeys("Selenium"+OpenQA.Selenium.Keys.Enter);//検索結果が出たという判定を何にするか?? は仕様依存??IWebElementfirstResult=wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementExists(By.TagName("h3")));//ページソースの出力Console.WriteLine(driver.PageSource);}catch(Exception){Console.WriteLine("Err");}finally{if(driver!=null){driver.Quit();}}}
参考にしたのは以下のサイト
Seleniumブラウザー自動化プロジェクト
C# Selenium 'ExpectedConditions is obsolete'
Selenium Web Driver, ExpectedConditions [deprecated] alternative
seleniumを使ってC#でGoogle Chromeの自動操作をする
【C#】Selenium ChromeDriverを使ってWebスクレイピング