Seleniumを使ってブラウザを介したサービスをJavaの中で操作できるようになります。今回は翻訳機を作りたいと思います。Google翻訳というページを使って実現したいと思います。
操作内容の確認
今回は以下の英語を日本語に翻訳したいと思います。シャイニングという映画に出てきたテキストです。
All day work and no play makes Jack a dull boy.
以下の画面はプライベートブラウジングで開いたGoogle翻訳の画面です。プライベートブラウジングはブラウザの機能で自分のプロファイルを使わずにページを表示します。通常日本語を使っている場合Googleではそれを検知して日本語で表示するのですがプライベートブラウジングを使うとそのような情報なしにページを開きます。
Seleniumもプロファイルは通常使わないため画面を確認するときにはプライベートブラウジングでページを開くとよいでしょう。
画面に赤で番号を振りました。行う操作は以下のようなものです。
- 翻訳前の言語を選ぶため下向き三角のボタンをクリックする。その後言語を選択するダイアログが出てくるのでEnglishを選択する。
- 翻訳前のテキストエリアに翻訳したい英語のテキストを入力する。
- 翻訳語の言語を選ぶため下向き三角のボタンをクリックする。その後言語を選択するダイアログが出てくるのでJapaneseを選択する。
- Translateとかいてある青いボタンを押す。
- 翻訳語のテキストを取得する。
要素の指定方法
次に特定に必要な画面上の各部品を特定します。その前に指定方法について説明しておきます。使える特定方法を二つあげます。
- id属性による指定
- XPathによる指定
他にもあるのですがとりあえずこの二つでほとんど足りると思います。
まず以下のようにタグにidが指定されている場合はこれを使います。一般にid属性の値はその画面でユニークになっている必要があり通常はそのようになっているはずです。
<a id="my-id">
SeleniumのWevDriverのインスタンスを作りページを開きます。
System.setProperty(ChromeDriverService.CHROME_DRIVER_EXE_PROPERTY, "/Users/myaccount/drive/lib/chromedriver"); WebDriver driver = new ChromeDriver(); driver.get("https://translate.google.com");
id指定で要素を取得するには以下のようにします。
WebElement srcTriangle = driver.findElement(By.id("my-id"));
これでid属性の値に重複がなければ上記のaタグのノードを取得できます。
xpath指定で取得するには以下のようにします。
WebElement srcTriangle = driver.findElement(By.xpath("//a[@id='my-id']"));
次回実際の項目を指定できるようにしていきます。