【SeleniumVBA】ハロワ検索で職種選択

以前こういう記事を書きました。

ここで紹介しているVBAは、ハロワの求人検索で賃金相場を把握するために自分用に作ったものです。

そうしたところ、「職種選択をしたい」というご相談をもらいましたので、記事にします。

モーダル画面

ハロワの求人検索で職種選択はモーダル画面になっています。

モーダル画面というのは元の画面とは別枠で表示される画面で、一番分かりやすい例でいうとエラーメッセージです。何か操作で問題があったときに、画面に出るエラーのメッセージボックス。あれも一種のモーダル画面です(細かく言うと違うけど)。

ハロワ求人検索における「希望する職種」
職種選択画面(下にうっすらと見える元の画面とは別枠で表示される。これがモーダル画面です)

調べてみたところ、ハロワのこのモーダル画面は、いったん職種選択をクリックしてモーダル画面を表示させないとHTMLにタグが生成されないのでした(これも語弊があって、クリックしてプログラムが動きタグを生成→その後画面が表示される・・・が正解)。

また、その生成されたタグも、通常の画面のタグとは別のところに記述されている点がちょっとやっかいでした。F12の開発者コンソールで見たとき、モーダル画面のタグは下の方に記述されていました。

これさえ分かれば、あとは要素を特定し、XPathをコピーし、コードに落とし込んでいけばいいです。

hidden要素

職種選択画面では職種の数が多いことから、大分類で表示→クリックしたら小分類を表示という風に、2段構えになっています。

上の図で「事務、管理職」をクリックし、「総務事務、人事事務」のチェックボックスをチェックするとしたら、次のようなコードになります。

    '希望する職種
    '職種を選択
    Set el = driver.FindElementsByXPath("//*[@id=""ID_Btn""]")(4)
    el.ScrollIntoView False '下端あわせ
    driver.Wait clWAIT
    el.Click
    driver.Wait clWAIT * 10 '長めに待つ
    '事務職、管理職をクリック(hidden要素をopen)
    driver.FindElementByXPath("//*[@id=""ID_form_1005""]/div[2]/div[2]/div[2]/div[1]/div").Click
    driver.Wait clWAIT * 10 '長めに待つ
    '総務事務、人事事務のチェックボックスをチェック
    driver.FindElementByXPath("//*[@id=""ID_skCheck0110""]").Click
    driver.Wait clWAIT
    '決定ボタン
    '決定ボタンが下の方にあるのでViewに入れる
    Set el = driver.FindElementByXPath("//*[@id=""ID_ok3""]")
    el.ScrollIntoView False '下端あわせ
    driver.Wait clWAIT
    el.Click
    driver.Wait clWAIT

細かい手続きについて特に解説はしませんが、FindElementsByXPath(複数形)とFindElementByXPath(単数形)とが混在している点にだけ解説を加えておきます。

複数形か単数形かは、XPathをF12開発者コンソールで取得したとき、Ctrl+F(検索)で検索してみれば判断がつきます。

例えば//*[@id=”ID_Btn”]というXPathだったら、そのまま検索してみればよいです。

そうすると、ハロワ求人検索では9件ヒットします。

今回使いたい要素はそのうちの4番目なので(4/9となっている点に注目)、FindElementsByXPath(複数形)となり、添え字は(4)となります。

検索したところ該当するものが1件だけだったらFindElementBy(単数形)を使えばよいです。

おまけ

今回作ったものをZIPにしておいておきます。

https://kn-sharoushi.com/wp-content/uploads/2023/03/20230329getJobSeekerInfo.zip

ハロワ求人検索の利用規約を読むと、スクレイピングを明確に禁止はしていませんが、迷惑になる行為は禁止されています。スクレイピングは便利ですが、使い方を誤ると多数の人に迷惑をかけます(速すぎるアクセスはサーバ負荷となる)。ですから、driver.Waitの時間はなるべく長めにとるようにしてください。