投稿

ラベル(Playwright)が付いた投稿を表示しています

チャットGPT、確かにすごいな。

イメージ
チャットGPTをたったいま、初めて使ってみた。確かにすごいな。一般的な質問であればかなり的確に答えてくれそうだが、ディープなかゆいころへの質問にはさすがに届かないみたいだけど。 昨日Playwrightで困ったことについて自分でいろいろ調べて解決済みだが、 チャットGPTだとどういう答えが出るか試してみた。 質問「Playwrightを使用してtouchstartイベントを使用するにはどうすればいいかを教えて」 笑った。何かというと、その場でコーディングしてた。これはびっくり。本当にもとめていた答えはブラウザ起動時にオプションでHasTouch=trueを指定する必要があるということだが、これは質問が悪かったのかもしれない。 と、いうことで、質問をもっと具体化してみた。 質問「Playwrightを使用してtouchstartイベントが発生できない。touchstartイベントを発生させるために必要な処理をすべて教えてほしい」 おお、ちゃんとHasTouchのことも書いてある。昨日何時間かかかったんだよなぁ、これ調べるのに。それどころか、page.emulate()なんて初めて知ったよ。もしかして、これ、ブラウザの再立ち上げ必要ない?いままでUA変えるときはブラウザ再起動させてたけど、ページ単位設定できるのか…。やってみないとわからんけど。 もう、googleなんて使っていられんな。これは。

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 )もおなじ。) 盤面の情報などは外側から取得できる気がしなかったので、単純に画像を直接解析して、盤面情報を取得しようとした。 ところが、微妙にマス目ごと...

C#でSeleniumをやめてPlaywrightを使ってみた4

イメージ
Playwrightでもう少し試したこと 拡張機能を使いたいのにダメ? 拡張機能を使えるようにする 拡張機能が消える? 拡張機能を使うためのコード例 要素の存在チェックがしたい CountAsync()で0が返ってこない罠 要素の存在チェックの方法の結論 JavaScriptを使うときの書き方 Playwrightを使いまくって作ったアプリ Playwrightでもう少し試したこと その3でやめようと思ったが、もう少し書きたいことがあったので、書いておく。 「拡張機能」「要素の存在確認」「JavaScriptの実行」についてのメモメモ。 拡張機能を使いたいのにダメ? まずは拡張機能について。 SeleniumのときはChromeの拡張機能はそのまま使えた。 特に何も設定しなくても、立ち上げるChromeの--user-data-dirを適切に設定しておけば、そこでインストールした拡張機能はSeleniumで起動させたChromeでも普通に使えた。 しかし、Playwrightはそうはいかない。 拡張機能をインストールしようとするとこんな感じでエラーが発生。入れられない。 このメッセージが出る理由とか対処法を検索すると、プロファイル作り直せばできたとかなんとかというページばかりだったが、消してもだめ。たどりついた結果は「chrome://version」にあった。 立ち上げのオプションに「--disable-extensions」が入っている。そりゃ、だめだわ。これ外せないかとおもったけど、外す方法は分からず。 その代わり、どうやら「--disable-extensions-except」をつかって特定の拡張機能だけは使えるようにすることはできそう。とはいえ、「--disable-extensions-except」を指定するためには先に拡張機能をインストールしていなければならない。 拡張機能を使えるようにする と、いうことで、まずはコマンドプロンプトを立ち上げて、Chromeを「--user-data-dir」指定して起動する。 枠内をクリックするとソースがクリップボードにコピーされます "C:\Program Files\Google\...

C#でSeleniumをやめてPlaywrightを使ってみた3

イメージ
Playwright Inspectorで自動コード生成できるみたいよ テスト用プロジェクトの作成 pwshのインストール Playwright Inspectorの設定 実行、操作の記録 デバッグトレースを試す Inspectorの実際(追記 2022/5/10) Playwright Inspectorで自動コード生成できるみたいよ 前回 、InfoseekのトップページにログインするコードをDevToolsで頑張ってやる方法を試してみたが、もっと簡単な方法がある。 ま、当たり前かもしれないけど、自動コード生成ツールを使う方法ね。 と、いうわけで今回は Playwright Inspector の使い方のはなし。 Playwright Inspector はブラウザの操作を記録して、C#、Python、 node.jsなどのスクリプトを自動生成してくれるツール。単純にそれだけではなく、作ったコードをプログラミングプラットフォームのようにデバッグ実行も可能で、ステップトレースできてしまうという、超便利なツール。 Seleniumとかでもこういうツールあったみたいだけど、自分は全く使ってなくて、もっぱらDevToolsと比較にらめっこしていたという、超原始人でした。 と、いうことで以下の手順で試してみよう。 ・テスト用のプロジェクトを用意して、デバッグビルドする。 ・pwshのインストール ・Playwright Inspectorの設定 ・実行、操作の記録 ・デバッグトレースを試す テスト用プロジェクトの作成 テスト用のプロジェクトを用意して、デバッグビルドする。 とりあえず、ブラウザ開くだけのプロジェクトを用意する。 前回作ったものの最小限で良いけど、せっかく作ったので使えるところは使って。NuGetでMicrosoft.Playwrightをインストールしてブラウザを立ち上げるコードを書く。プロジェクト名は今回は「Playwrightテスト2」で作っている。 枠内をクリックするとソースがクリップボードにコピーされます using System; using System.Collections.Generic; using System.ComponentModel; usi...

C#でSeleniumをやめてPlaywrightを使ってみた2

イメージ
起動時タブが2つ開くのをなおす 起動時複数タブが開く設定の時の動作 ブラウザを閉じたら、アプリも終了させるようにする 新しいタブを開く、閉じる 指定したタブにフォーカスする ページのスクリーンショットを試す 自動処理を作ってみる(想定するページの動き) 自動処理を作ってみる(トップページ) 自動処理を作ってみる(ユーザーIDの入力) 自動処理を作ってみる(パスワードの入力) 自動処理を作ってみる(まとめ) 起動時タブが2つ開くのをなおす 前回 、立ち上げ時に2つタブが開き、2つ目のほうに指示したURLのページが表示されるという現象が起きた。 枠内をクリックするとソースがクリップボードにコピーされます var ページ = await ブラウザコンテキスト.NewPageAsync(); 理由は↑この行らしい。NewPageしているので、起動時にabout:blankのほかに、新しいページを開こうとしているということ。Chromeではかならず立ち上げ時に何らかのページはある。 枠内をクリックするとソースがクリップボードにコピーされます var ページ = ブラウザコンテキスト. Pages[0] ; と、いうことで、単純にPagesの配列の[0]は保証されているんではないか。 はい、うまくいきました。 起動時複数タブが開く設定の時の動作 あとは、Chromeの設定によっては最初から複数タブが開かれるときがある。 起動時の設定で、前回開いていたページを開くとか、特定のページセットを開くを設定している場合。上ではbingとか、yahooを開いたまま前回のページを開く設定で終了して、再立ち上げしてみる。 最初は、閉じる前のページ+about:blankのタブが追加されて開き、about:blankにフォーカスが当たっている状態だった。yahoo.comの読み込み終了までしばらく待ったかと思ったら、yahoo.comのタブがgoogle.comに移動した。 これは…Pages[]って左のタブから順番ではない? ページ.GotoAsync()のあとに以下を付け加えて同じ状況を再現してみる。 枠内をクリックする...

C#でSeleniumをやめてPlaywrightを使ってみた1

イメージ
Playwrightっていうのがあるらしい Visual Studio 2022のインストール テスト用のプロジェクトを作成 ブラウザを立ち上げるコード ChromiumではなくChromeで起ち上げる ユーザープロファイルを指定する Playwrightっていうのがあるらしい ブラウザの自動処理ってSeleniumでいつもやっているんだけど、別に不満もないけど、比較的新しいツールとしてPlaywrightがいいらしいときいた。 どうせ自分はSeleniumを使うといってもChromeで自動処理したいだけなんだけど、Seleniumの場合、Chromeのバージョンアップにともなって適合するバージョンのドライバをダウンロードしなきゃいけなかったりでちょっと不便。(ま、起動時にチェックして自動でダウンロードする専用クラスは自作したんだけど) で、Seleniumで自動処理しているときにときどきブラウザ自体が落ちるときがあって、これを何とかしたいと思って調べたらPlaywrightが引っかかってきた。とはいえ、ブラウザが落ちなくなるとかSeleniumより安定するという話があったわけではない。 ただただ、古くからあるSeleniumではなく2020年産の新しいツール(思想)であるPlaywrightに移行するのもよさそうだし、Microsoftが面倒みているので、将来性も悪くなさそう。 とはいえ、PlaywrightをC#で日本語で説明しているページとかも見つからない。あるのかもしれないけど。 Visual Studio 2017で手探りでやってみようとしたが、うまくいかん。なぜ失敗したかというと、.Netframework 4.8でやろうとしたから。どうも .NET Core 5.0 でないと駄目なようだが、 Visual Studio 2017では無理 。(Core のもっと下のバージョンでもいいのかもしれないが少なくとも2017のコンソールアプリプロジェクトで.NET Core 2.1を指定してもだめだった) Visual Studio 2022のインストール と、いうことでVisual Studio 2022のインストールから。 https://visualstudio.microsoft...