· 

Seleniumをpowershellから使う(2)

 

webページの操作を自動化できるSelenium。これをpowershellから使おうっていう試み。今回は、指定する要素をどうやって知ることができるのかってのを書いてみる。Seleniumの紹介ページってものすごーくたくさんあるけど、要素(element)の指定方法について詳しく書かれたものはないと思う。ていうか、そんなの常識?なのか?ってところに切り込んでみる。
例題として、SundayEngineerのページに自動的にコメントするスクリプトを書いてみる。
どのページにするかって言うと前回記事のこちら(https://sunday-engineer.jimdofree.com/2024/06/11/selenium%E3%82%92powershell%E3%81%8B%E3%82%89%E4%BD%BF%E3%81%86-1/)とする。まずは、chromeでそのページを開いてみる。そして、ctrl+shift+iを押す。そすっと、
こんな感じで、開発者用のウィンドウが現れる。で、今回自動入力したいコメント欄が見えるように下のほうまでスクロールして、その状態で、開発者ウィンドウのElementsタブで閉じているアイテムを開いたりなんだりしながらマウスを行ったり来たりさせると、Webページのほうが色が変わったりする。で、
こんな感じで、まずはコメントの「名前」ってところが
inputって要素でそのnameが"name"であり、idが"name11138124819"であるので、これのどっちかを使って指定できそうだなってわかる。
でコメント欄は
textareaって要素でそのnameが"comment"であり、idが"comment11138124819"。
で、送信ボタンは
inputって要素でそのnameが"送信"であり、idが"submit11138124819"で、valueが"送信"。ってことがわかる。
で、いろいろ調べると、send-sekeysだけじゃなくてsetypeってやつでもテキストを送れるらしいので、今回はこっちを使ってみる。-clearfirst使うと入力前のクリアが少し楽になるっぽいし(試したわけではない)。
そして、一旦、はまったのが、jimboのホームページって、cookieの同意をしないとまともに表示されないので、cookieの同意も押さないと入力できないってこと。
これも要素を調べて自動で押しちゃう。
で、idがcookie-settings-selectedってことで要素を選択してクリックすればよいのだろう。それと、(テキストを入力する)要素をクリックしてからじゃないと、入力できないことがある気が何となくする(てきとーすぎやろ)ので、setypeの前にclickしておくことにする。
そしてコードがこちら。
  1. write-output "hello selenium!"
  2. $binary_path="C:\Program Files\Google\Chrome\Application\chrome.exe"
  3. $driver_path="C:\Users\hoge\Documents\work\powershell\selenium_study\chromedriver-win64-125.0.6422.141"
  4. $start_url="https://sunday-engineer.jimdofree.com/2024/06/11/selenium%E3%82%92powershell%E3%81%8B%E3%82%89%E4%BD%BF%E3%81%86-1/"
  5. $driver=start-sechrome -binarypath $binary_path -webdriverdirectory $driver_path
  6. enter-seurl -url $start_url -driver $driver
  7. start-sleep -Milliseconds 300
  8.     
  9. $element=find-seelement -driver $driver -Id 'cookie-settings-selected'
  10. send-seclick -element $element
  11. start-sleep -Milliseconds 100
  12.     
  13. $element=find-seelement -driver $driver -Id 'name11138124819'
  14. setype -element $element -keys "ディグダ" -ClearFirst
  15.     
  16. $element=find-seelement -driver $driver -Id 'comment11138124819'
  17. setype -element $element -keys "地面ポケモン" -ClearFirst
  18.     
  19. $element=find-seelement -driver $driver -Id 'submit11138124819'
  20. send-seclick -element $element
  21.     
  22. start-sleep 1
  23.     
  24. stop-sedriver -driver $driver
  25. write-output "completed"
まぁこれでうまくいく。
ところで、このコードはsjisで保存してpowershellから実行するとうまくいくんだけど、vscodeから実行すると文字化けする。powershellの文字コード問題は、、、また別の機会に考える。c#だと、このへんが少し楽になりそうな(というのも情報が多いから)気がする。が、powershellはマイブームなので。

powershellからseleniumを使ってwebブラウザ操作を自動化するってなかなか面白いと思う。業務ソフトがwebブラウザベースなら取り組まない手はない。seleniumと格闘するのが正解か、人力でやり切るのが正解か、、、って悩んで躊躇することがあると思うけど、躊躇するくらいだったらやってみるのがいいと思う。

今回の例題を誰かがそのまま試して、たくさんのコメント(しかも文字化けしているのもあったり)が来たとしたらまじうけるー