今回のテーマ
こんにちは、サルモリです!
ココがポイント
今回はDeepl翻訳を自動化するついでにSeleniumのエラーを対策していきます。
下記の記事の続きです。
CHECK
-
【C# sharp】「OpenQA.Selenium.NoSuchElementException」と「OpenQA.Selenium.ElementNotInteractableException: element not interactable」の解決方法1
ChatGPTのAPIを使わずに自動化することが可能です。 下記の本を読めば、ChatGPT4でも料金掛からずに自動化できます!KindleUnlimited会員であれば無料で読めます。 今回のテーマ ...
続きを見る
Seleniumを使う環境が整っていない方はこちら
CHECK
-
【2024年2月最新版】C#でMicrosoft Edgeを自動化してみよう
ChatGPTのAPIを使わずに自動化することが可能です。 下記の本を読めば、ChatGPT4でも料金掛からずに自動化できます!KindleUnlimited会員であれば無料で読めます。 まえがき こ ...
続きを見る
Seleniumの操作方法の説明は下記に記述しております。
CHECK
前回の記事のおさらい
前回の記事では、「OpenQA.Selenium.ElementNotInteractableException: element not interactable」は下記の3点を試すとエラーが解消するとお伝えしました。
ポイント
- 画面を最大化する。
- スクロールを合わせる。
- 一つのアクション後に一定時間処理を空けてみる。
前回の記事では1番目の「画面を最大化する」方法でエラーを解消できたので、今回は2番目と3番目の解決方法を試してみましょう!!
Deepl翻訳のソースコード
DeepL翻訳で翻訳先の言語を「イタリア語」に選択するソースコードを作ってみました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
using OpenQA.Selenium; using OpenQA.Selenium.Edge; namespace Selenium { class Program { static void Main(string[] args) { var driver = new EdgeDriver(EdgeDriverService.CreateDefaultService(@"D:\", "msedgedriver.exe")); driver.Navigate().GoToUrl("https://www.deepl.com/ja/translator"); //翻訳前のテキストボックスに記述します。 driver.FindElement(By.XPath("//textarea[@class = 'lmt__textarea lmt__source_textarea lmt__textarea_base_style']")).SendKeys("テスト"); //翻訳言語一覧表示ボタンをクリックします。 driver.FindElement(By.XPath("//span[@class='translate_to']")).Click(); //翻訳言語を選びます。 driver.FindElement(By.XPath("//button[@dl-test='translator-lang-option-it-IT']")).Submit(); } } } |
出力結果
OpenQA.Selenium.ElementNotInteractableException: element not interactable
イタリア語を選択して、テストを翻訳できていると思います。
下記が参照している属性一覧です。
属性一覧
翻訳前のテキストボックス
<textarea class="lmt__textarea lmt__source_textarea lmt__textarea_base_style" data-gramm_editor="false" tabindex="110" dl-test="translator-source-input" autocomplete="off" lang=""></textarea>
訳文ラベルクリック
<span class="translate_to">訳文 </span>
翻訳言語の選択
<button tabindex="99" dl-test="translator-lang-option-it-IT">イタリア語</button>
スクロールバーを移動するソースコード
下記の1行追加したソースコードを実行してみてください。
window.scrollToは、スクロールバーを指定した位置に移動するメソッドです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
using OpenQA.Selenium; using OpenQA.Selenium.Edge; namespace Selenium { class Program { static void Main(string[] args) { var driver = new EdgeDriver(EdgeDriverService.CreateDefaultService(@"D:\", "msedgedriver.exe")); driver.Navigate().GoToUrl("https://www.deepl.com/ja/translator"); //翻訳前のテキストボックスに記述します。 driver.FindElement(By.XPath("//textarea[@class = 'lmt__textarea lmt__source_textarea lmt__textarea_base_style']")).SendKeys("テスト"); //下記のコードを一行追加 driver.ExecuteScript("window.scrollTo(0, 1000)"); //翻訳言語一覧表示ボタンをクリックします。 driver.FindElement(By.XPath("//span[@class='translate_to']")).Click(); //翻訳言語を選びます。 driver.FindElement(By.XPath("//button[@dl-test='translator-lang-option-en-IT']")).Submit(); } } } |
下記のエラーが表示されたと思います。下記のエラーは表示画面に訳文が見つからず、クリック出来なかったことによるエラーです。
command
OpenQA.Selenium.ElementClickInterceptedException
なので、スクロールバーを上に戻してあげましょう。下記を追加してみてください。
1 |
driver.ExecuteScript("window.scrollTo(0, 0)"); |
処理がなおったと思います。
一定時間処理を空ける方法
一つのアクション後に一定時間処理を空ける下記のやり方は
System.Threadingを追加し、
Thread.Sleep(1000)のように指定してください。1000は1秒間待つということです。
処理に画面表示が追い付いてない時などに使用すると良いです。
基本的にエラーでつまずいたときは画面に対象の属性が表示されないことがほとんどなので、
エラーでつまずいた時は下記の3つを試してみましょう。
ポイント
- 画面を最大化する。
- スクロールを合わせる。
- 一つのアクション後に一定時間処理を空けてみる。
下記がソースコードです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
using OpenQA.Selenium; using OpenQA.Selenium.Edge; using System.Threading; namespace Selenium { class Program { static void Main(string[] args) { var driver = new EdgeDriver(EdgeDriverService.CreateDefaultService(@"D:\", "msedgedriver.exe")); driver.Navigate().GoToUrl("https://www.deepl.com/ja/translator"); //翻訳前のテキストボックスに記述します。 driver.FindElement(By.XPath("//textarea[@class = 'lmt__textarea lmt__source_textarea lmt__textarea_base_style']")).SendKeys("テスト"); //スクロールバーを下げる driver.ExecuteScript("window.scrollTo(0, 1000)"); //一秒待つ Thread.Sleep(1000); //最大化 driver.Manage().Window.Maximize(); //スクロールバーを上げる driver.ExecuteScript("window.scrollTo(0, 0)"); //翻訳言語一覧表示ボタンをクリックします。 driver.FindElement(By.XPath("//span[@class='translate_to']")).Click(); //翻訳言語を選びます。 driver.FindElement(By.XPath("//button[@dl-test='translator-lang-option-it-IT']")).Submit(); } } } |
自動化の関連記事はこちら