第4話 恋中さんとSelenium
「どうして高時給で検索すると女性限定ばかりなのかしら」
バイト探しを始めて五分が経過した頃、恋中さんが不機嫌そうに言った。
「俺の方も似たような感じだ」
俺はスマホを床に置いて伸びをした。
なるべく近場で、何らかのスキルが磨けて、かつ高時給なアルバイト。そんな都合の良い職を探しているのだが、やっぱり現実は甘くない。
もう少し妥協しよう。
恋中さんに声をかけようとした俺は、その真剣な後ろ姿を見て口を閉じた。
……どっかズレてるけど、良い人だよな。
例えば、俺と彼女を除いた38人のクラスメイトに同じことを頼んだとして、彼女以上に真剣に手伝ってくれるのは何人だろうか。
そんなことを考えていると、彼女が低い声で言った。
「本番が無い? お金が貰えるのに練習だけなのかしら?」
「恋中さん、やり方を変えよう」
俺は彼女がアレな方向に進んでいるのを感じて、少し声を張った。
初対面で巨乳なプログラミング言語とか言ってたのに、意外と下ネタが通じないのだろうか? ……いや、指紋で間接キスとも言ってたし、特殊な方向性という可能性もあるな。
「どんなやり方にするの?」
俺は余計な思考を中断して質問に答える。
「通える場所を全部ピックアップして、点数を付けるとかどうだ?」
「素晴らしいわね。点数の基準は最初と同じで良いのかしら?」
「うん、そうしよう。ただ、リストアップするの大変だよな」
求人サイトの検索機能を使えば、ある程度の絞り込みは可能だ。
しかし数が多い。そもそも点数を付けるためには、どこかに書き出す必要がある。
……なんだかんだ手書きが一番丸いか?
「ちゃらららん」
何とか楽をしようと考えていると、恋中さんが謎の鳴き声を発した。
「恋中さんお友達特典を使いますか?」
得意気な顔と、陽気な高い声。
何かアイデアがあるのだろうか?
「はい、使います」
「仕方ないですねぇ!」
うざかわいい。
彼女は胸を張り、見事なドヤ顔で言った。
「プログラムを作れば楽勝です!」
「プログラム?」
「見ててください」
恋中さんはご機嫌な様子でタイピングを始める。俺は腰を上げて彼女の隣に立ち、画面を覗き見た。
「こういう場合には
「セレニウム?」
元素みたいな名前だなと思っていると、彼女は黒い画面を立ち上げ、何かコマンドを入力した。
conda activate itumono
jupyter notebook
意味はさっぱり分からないが、ブラウザが起動した。
恋中さんは慣れた様子で画面を操作して、エディターっぽいページに移動する。
「ここにプログラミングする感じ?」
「正解です。これはノートブックといって、インタプリタ言語であるPythonの利点を最大限に生かせるアプリケーションなのですよ」
俺が質問すると、恋中さんは嬉しそうに答えた。そのドヤ顔を見て「かわいい」と思いながら、もうひとつ問いかける。
「インタプリタ言語って、一行ずつ実行できるって意味だっけ?」
「正解です。よく勉強してますね。偉いです」
俺はこの時、生まれて初めて授業を真面目に聞いていて良かったと思った。
「ノートブックは、セル単位でプログラムを記述して実行できます。そして結果を後に引き継げるので、機能をちょっとずつテストできます」
「へー、それは便利だな」
俺の知識は座学レベルでしかない。実技の方はタブレットのアプリでブロックを並べたくらいだ。
一応、独学でC言語を触ったことがある。
だが、当時はいくつかのプログラムを実行したところで満足してしまった。
C言語の場合、プログラムを機械が分かる形に翻訳する「コンパイル」が必須だ。その作業は少しでもプログラムを変更する度に発生して面倒である。だから、ノートブックのように実行しながら結果を確かめられる機能は、とても便利だと思った。
「早速、プログラムを作りますね」
「よろしくお願いします」
「はい!」
恋中さんは弾むようにタイピングをした。
ダダダダという音と共に、次々とエディタっぽい場所に文字が現れる。
from selenium import webdriver
driver = webdriver.Chrome()
……すげぇ、全部覚えてるんだ。
ひとつ覚えるだけでも億劫そうな長い単語が次々と入力される。
感動しながら見ていると、恋中さんはターンッとエンターキーを叩いた。
もうひとつのブラウザが立ち上がった。
普通、ブラウザを立ち上げると検索ページが出てくると思うが、今は真っ白な画面が表示されている。その代わり、上の方に「Chromeは自動テスト ソフトウェアによって制御されています」という表示があった。
「自動テスト?」
「お目が高い!」
恋中さんメッチャ褒めてくれる。
「セレニウムを使えばブラウザ操作を自動化できます。好きなボタンをクリックしたりとか、欲しい文字を取得したりとか」
「おぉ! つまり求人サイトに書いてある文字をゲットできるのか」
「正解です。早速、ゲットしますね」
マジですごい。
俺は、恋中さんにも負けないくらいテンションが上がった。
プログラミング。
誰しも一度は憧れみたいな感情を抱いたことがあるはずだ。
しかし実際に授業を受けた印象は「なんだ、他の教科と変わんねぇな」という感じだった。それを使って何ができるのか、というイメージが難しかった。
その答えが目の前にある。
アルバイト先を探す。日常的な行動に対して、プログラミングが活用される。
ドキドキした。
どういう結果になるのか全く分からないが、何か俺にとって革命的なことが起きるような予感がした。
「セレニウムを使う時は、ブラウザを立ち上げた後に、情報を取得したいページまで遷移するところから始めます」
彼女は普通のブラウザで求人サイトを開き、上の方にあるアドレスをコピーした。それからセレニウムのブラウザにペーストして、求人サイトに遷移する。
「次は欲しい情報を右クリックして、検証をクリックします」
彼女は説明しながら実演する。
「おぉ、なんか右の方に色々出てきたな」
「はい。これはウェブページの中身です。ほらここ、よく見ると、今右クリックしたお店の名前がありますよ」
恋中さんは、その場所を指で示しながら言った。
「ほんとだ。これを、どうやってゲットするんだ?」
「場合によりますが、今回は普通にHTMLでベタ書きですね。この場合は、欲しい要素を構成しているクラス名かタグ名を見ます。今回は……ふふっ、そのまんまだ」
彼女はマウスを使って「MiseMei」という文字をドラックした。
「どうやら店名というクラスが使われているようです。念のため、ソース全体を見てダブってないか確かめます」
彼女がタタタとキーボードを叩くと、ソースコードっぽい画面に切り替わった。
「待って。その画面どうやって出したの?」
「今のはCtrl+Uです。普通のサイトなら、ソースコードが全部見れます」
「すげぇ」
人は本当にすごいと思った時、語彙力が小学生レベルになるらしい。
その後も恋中さんは説明と実演を続け、あっという間にプログラムを完成させた。
ざっくり掻い摘むと、
from selenium.webdriver.common.by import By
driver.find_elements(By.CLASS_NAME, "MiseMei")
というプログラムで店名を所有した「エレメント」を取得できる。ウェブページは無数のエレメントによって構成されており、セレニウムは、これを自由に操ることができる。
今回のサイトから情報を抜き出す場合、必要な機能はふたつ。
ひとつは求人情報が記されたエレメントを取得すること。
もうひとつは次のページへ移動するためのボタンをクリックすること。
一見すると難しい技術が必要に思える。
しかし、必要なプログラムは次の三つしかない。
# エレメントを取得する方法
e = driver.find_elements( <欲しいエレメントの情報> )
# ボタンをクリックする方法
e.click()
# エレメントから文字列を取得する方法
e.text
このたった三つの要素を組み合わせることで、恋中さんはウェブページから情報を抜き出すプログラムを作成した。傍目から見たそれは、まるで魔法のようだった。
「後は待てばCSVファイルが完成します。それをスプレッドシートに読み込んで、一緒に点数を付けましょう」
恋中さんは無邪気な笑顔で言った。
直前まで高度な技術を披露していたとは思えないようなギャップを前に、言葉が出なかった。だから俺は、軽く息を吸い込んでから返事をした。
「ありがとう。マジで助かる」
「ふふん。どうですか? これが恋中さんお友達特典ですよ?」
「最高」
「どれくらい最高ですか?」
「一家に一人は欲しくなるレベル」
「それは無理な相談です。恋中さんは一人だけですからね」
恋中さんは今日一番嬉しそうな笑顔で言った。
「まにゃっ!?」
その直後、彼女は顔を真っ赤にして謎の悲鳴をあげた。
どうしたのだろう。不思議に思って見ていると、とても早口で説明してくれた。
「お、お、おうちに欲しいというのは、つまりそのプロポーズ的な意味でしたか?」
「普通に違うけど」
「ごめんなさい出会って一週間で一生を決める判断をするのはまだちょっと難しいのでもう少し好感度を稼いだ後にもう一回言ってください。その時また考えます」
なんか、よく分らんけど振られた?
「……はは」
「なっ、なんで笑うのかしら!?」
「ごめん、なんか楽しくて」
怒られるかなと思いながら答えると、恋中さんは、きょとんとした。
「……楽しい?」
「うん、楽しい」
「……そっか」
恋中さんは俯いた。
その表情は前髪に隠れてしまって見えない。
どういう感情なのだろう?
俺は少し不安になって、笑いも引っ込んだ。
その瞬間、彼女は俺と反対方向に顔を向け、小さな声で言った。
「……私も、楽しい」
「……そうか」
反則だろ、今の。
ドキッとした。女子がイケメンに壁ドンされる気持ちって、こんな感じなのだろうかと、よく分からない例えが頭に浮かぶくらいにドキッとした。
その後、なんとなく二人とも無言だった。
俺は唇を噛み、騒がしい心臓を手で押さえながらディスプレイを見る。
セレニウムによって画面が自動的に動いている。このプログラムは、すべての求人情報をゲットしている。恋中さんは、これを十分くらいで完成させた。
……今のところ、貰ってばっかりだな。
彼女は友達が欲しいと言った。
その不思議な性格故に、これまで長続きした交友関係は無かったと言っていた。
実を言えば、俺も友達に関して不安を抱いていた。
親元を離れ、地元の友達と別れ、誰も自分のことを知らない高校を選んだからだ。
これまでと違う文化、常識、地元ルール。
上手く順応できるかどうか不安だった。
高校生活初日、周囲は同じ中学校の連中と固まっていた。
その輪に入るのは難しくて、俺は溜息と一緒に窓の外を見た。
恋中さんと出会った。
その瞬間から、寂しいと感じたことは一度も無い。
……こっちも、返さないとだよな。
何をすれば彼女が喜ぶのかは分からない。
ただ、可能な限り恩を返していきたいと、そう思った。
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます