投稿

6月, 2022の投稿を表示しています

PlaywrightとGoogle reCAPTCHA

Playwrightは当然ロボット系のテストなので、Google reCAPTCHAに引っかかります。 なんですが、よくわかりませんが、reCAPTCHA v3をテストできるページでちょっと試してみたら意外なことが…。 まず予備知識としてreCAPTCHAにはv2とv3が今は出回っています。 v2は写真の中から「バス」を選択してくださいみたいな写真から選ぶやつ。 v3はブラウザ利用者は何もしないで判定される進化した版です。 当然v3であればユーザーは余計な選択などをしなくてもいいため、ユーザー利便性も上がりますが、導入側はボットと判断したときの処理を自前で作らなければならないという仕様です。 で、このボット判定ですが、Googleでやってくれるのはボット度合いを数値化した指数みたいなものを返してきます。 一応1.0~0.0で値が1.0に近ければより人間らしいということになります。 問題はv2と違って、v3は値をいくつの時にボットと判定するかはサイトの運営者が決めてくださいってこと。 閾値0.5ぐらいで振り分けるのが一般的なようですが、いろいろ読んでいるとボットでもないのに0.3と判断されたといった記事も見かけます。 さて、ではPlaywrightではどうかというと…。 v3のロボット閾値判定が0.7になるんですよ。上記にも書いたように0.9ぐらいなら間違いなく人間判定で、場合によっては人間の操作で0.5や0.3と判定値を返してくることすらあるらしいのに、Playwrightでアクセスしてみたら0.7って結果に…。 まじか。 ちなみにreCAPTCHA v2は音声での認証にしてMicrosoftのAzureの音声API通せば(Googleクラウドをあえて使わず)まず失敗しません。試してみたところ、Googleの無料の音声解析APIはまず聞き取ってくれません。Azureはほぼ確実に聞き取れます。 v3のほうはまあ、テストページが1つだけなので、いろんなページに移動する(各ページにreCAPTCHA APIが設置されている)場合はちゃんと0.3とか0.1になるのかもしれませんが、トップページとかお問い合わせのページにポツンと入れているだけだと、Playwrightでは通過できてしまうのかもしれません。 6/28 追記 いくつかのテストサイトで試してみましたが、0.3と判断

マインスイーパーを自動で解いてみる

イメージ
マインスイーパーを自動で解いてみよう マインスイーパーのゲームで試す マインスイーパーをやっている様子 マインスイーパーを自動で解いてみよう 今更ながらにマインスイーパーを自動で解くプログラムを作った。 まずはマインスイーパーの問題を作るプログラム。 これは簡単。これに加えて、指定した場所から爆弾orパネルの開放する処理。 これも再帰するだけなので、簡単。 あっというま。ま、昔7行プログラムでできたぐらいだしね。 問題を作ったら、今度は問題を解くほうの処理。 自分で解いていくわけではないので、テキストで表示して解いていく過程を 見せるプログラムにした。 未開放のパネルに対し、爆弾の確率を設定する。設定した確率の内、最も低いパネルを開く。 ただそれだけ。 盤面を全体的に走査し、確実に爆弾の場所もしくは確実に爆弾ではない場所を調べる。 どちらかが見つかったら、その周囲の8マスの確率を計算し直す。 確率の計算が発生した場合は、再度盤面全体を走査する。 そして最後に爆弾の確率が最も低い基本的には確率0のパネルを開く。 それだけでもまあまあな正答率にはなる。でも、まあまあはまあまあ。 確率0のパネルがない時はそこそこの確率で爆弾を引いてしまう。 そこでさらに一工夫して、確率0が見つからない場合に 各地点の発生しうる爆弾の組み合わせを全通り試し、その結果矛盾が発生しない 全組み合わせのチェックの結果、爆弾が絶対発生する/絶対発生しえないパネルを 確定するようにする。爆弾の仮置きで矛盾がないかということね。 これらにより、まあまあの正答率はなかなかの正答率になる。 マインスイーパーのゲームで試す ある程度ロジックが問題ないレベルになったとおもわれるので、ウェブサイトのマインスイーパーで試してみる。 試したのは楽天ポイントモールのゲームセンター内のマインスイーパー。20x20のLevel5の盤面で試す。(ちなみにラクマ版ゲームセンター( https://fril.jp/games# )でも同じだしLINE版のゲームセンター( https://kantan.game/lightgame )もおなじ。) 盤面の情報などは外側から取得できる気がしなかったので、単純に画像を直接解析して、盤面情報を取得しようとした。 ところが、微妙にマス目ごと