「Selenium」タグアーカイブ

C#+Selenium+Chrome 実行時に謎のエラーが発生:unknown error: cannot parse internal JSON template: Line: 1, column: 1, Unexpected token.


C#で作成したWindows アプリを使用してGoogle Chromeを操縦しているとなぜか突然

unknown error: cannot parse internal JSON template: Line: 1, column: 1, Unexpected token.

このエラーが出る様になりました。

デスクトップPCでエラーは出ておらず、なぜかノートPCで発生する状況が続いていました。

Visual Studio、Google Chrome・・・

色々試しました。解決は本当に大変でした。

最悪ノートPCのハード的な問題が原因だと思ってPC買い替えまで考えてました。これで10万浮いたー。

ですが、このエラーの原因はSeleniumでChromeを操縦する時に使用していたディレクトリ中のファイルが何等かの原因で破損していた事が原因でした。

一旦、

C:\ChromeData

を丸ごと削除した上で、C#(+Selenium)のプログラムを実行したところ正常に動作する様になりました。

 

本当に今回はかなりハマりました。

同じ事象が起きてハマっている方の参考になればと思います。

このブログを書いている2020年8月時点で、このエラーについて解説しているサイトは1つもありませんでした。

 


ChromeでWEB上のPDFファイルを開く際に自動でダウンロードさせる設定メモ


WEB上で公開されているPDFファイルをChromeから開くと、Chrome上で標準では、表示されます。

PDF Viewerというソフトが行っている様です。

PDFページにアクセスした時に、自動でローカルに保存をする為の方法を探していて少しはまったのでメモしておきます。

ChromeでPDFページを自動でローカルに保存する手順


 

 

右上の…というのをクリック > 設定(S)

検索ワードの有力エリアが出て来るので「pdf」と入力し検索します。

設定画面から順に辿る事も可能ですが、面倒なので検索した方が効率が良いです。

サイトの設定 をクリックします。

ページを下にスクロールしてPDF ドキュメントをクリックします。

PDF ファイルをChromeで自動的に開く代わりにダウンロードする

のチェックを入れます。Chromeではチェックした時にチェックマークが青色になります。

ここまでの手順を行えば、WEBサーバに公開されているPDFファイルをChromeからアクセスすれば、自動でローカルに保存される様になります。

 

C#+Selenium+ChromeDriverで操縦しています。

この操作をちまちま設定するのは面倒なので、C#上で設定する方法がいまいちわかりません。

手順をブログで公開している人がいるのですが、うまくいきません。

誰か詳しい方コメントにて教えてくださいm(_)m

 

 

 

 

 


C#+Seleniumでスクレイピングする時の俺的メモ


メモ書きとして残しておきます。

スクレイピングをする時にはいつもIEをC#から自動操縦して取得していましたが、Seleniumを使った方がむっちゃ楽でおすすめです。

Selenium(セレニウム)と読みます。

Seleniumには、Google Crome/Firefox/IEとそれぞれの代表的なブラウザに対応したDriverが出ています。

Visual Studioを使用してSeleniumのパッケージをダウンロードする場合

メニュー > プロジェクト > NuGetパッケージの管理(N)

からSelenium系を見つけてインストールしておきましょう。

詳しくはググって他のサイトみてください。

XPathを簡単に調べる方法

Cromeを開いて調べたいツールの上で右クリック > 検証(I) > Copy > Copy XPath

これむっちゃ便利。

一瞬でスクレイピングしたい要素のXPathを取得できちゃいます。

初めて知ったけどむっちゃ便利でした。

Chromeのバージョンがあがるとエラーが発生する

2019/4/30 Cromeをいつも通りC#から操作しようとしたところエラーが発生しました。

エラーの内容はこちらです。

session not created: Chrome version must be between 70 and 73
(Driver info: chromedriver=73.0.3683.68 (47787ec04b6e38e22703e856e101e840b65afe72),platform=Windows NT 10.0.17763 x86_64) (SessionNotCreated)

GoogleCromeのバージョンが74に上がった(手動で更新した)為に、Seleniumで使用するChromeDriverのバージョンを上げないと動作しない為に、このエラーが発生してしまっています。

GoogleCromeは原則として常に最新を使う事を推奨されています。

そこで私はChromeのバージョンをアップしました。

しかし、ChromeDriverが古くなり最新バージョン(74)に対応していない為に、今回のエラーが発生したという事です。

ChromeDiverのエラーでやったこと

メニュー > プロジェクト > 更新プログラム

Microsoft.Web.Xdt

Selenium.Chrome.WebDriver 

Selenium.WebDriver.ChromeDriver

更新モジュールが出ていたのでこれらを更新しました。

 

更新:2020/12/01

Google Chromeは月に1回以上更新が入ります。

それに合わせてChromeDriverも更新を都度行っていく必要があり

ます。

プロジェクトの上で右クリック > NuGet パッケージの管理

CHROMEと入力します。

ここで最新ドライバーが出ている場合には、それを選択しインストールを行います。

更新したモジュール

Selenium.WebDriver.ChromeDriver  作成者:jsakamoto, 14.4M 件のダウンロード

このドライバは、14.4M

つまり約1400万件もダウンロードされている事がわかります。

ダウンロード件数が多い方が世界中の人がダウンロードしており、動作検証過程で揉まれている為安定しています。

Chromeドライバーの最新が出た場合には、ダウンロード件数が大きい物から優先的にダウンロードして使う様にすると良いです。


Visual Studio 2017でSelenium(セレニウム)を使う方法の纏め NuGetパッケージ必須だよ


Selenium(セレニウム)とは?

セレニウムとは、C#などのプログラム言語でブラウザ(Cromeなど)を自動操縦する際に使用します。

WEBシステムなどを作った際にテストを人間がちまちまやるよりも、そのテスト自体を自動化させた方が効率が良いです。

その為、WEBサイトのテストなどで使われる事が多いです。

(人様のサイトに悪い事しちゃだめよん♪)

あとは、スクレイピング(WEBサイトのデータを取得すること)などにも便利です。

C#からIEの自動操縦をするだけでもスクレイピングは勿論する事が出来ますが、如何せんMicrosoftの作ったIEです。

品質が悪いです。いろいろとInternet Explorerはダメなんですが一番我慢ならないのはページのロードが遅いという事です。

一回当たりの秒数が少なくても、IEみたくページのロードに時間がいちいち割かれる様だとトータルで時間の浪費になります。

そこでスクレイピングをする場合には、Seleniumを使ってCromeを操作する事をおすすめします。

Visual Studio 2017 + C#のプロジェクトでSeleniumuを使う為に行った作業を自分用にまとめておきます。

あと、Seleniumは最近私も始めた程度なのでそこまで詳しくありません。詳しい人はコメント欄などでTips的に色々と押してくれると嬉しいです。

VS2017でSeleniumを使える様にした手順

まず、最初にプロジェクトの参照の上で右クリック > NuGet パッケージの管理(N)をクリックします。

すると右側にNuGet パッケージ マネージャー

というウィンドウが出てきます。

NuGet

と入力して検索します。

すると

NuGet.Core  作成者:Outercurve Foundation,

というのが出てきます。

これを選択し右側のインストールをクリックします。

この時に開発中のプロジェクトが開いていると

変更のプレビュー

Visual Studio はこのソリューションに変更を加えようとしています。[OK]をクリックすると、以下に一覧表示された変更が適用されます。

インストール中

Microsoft.Web.Xdt.2.1.1
NuGet.Core.2.14.0

今後これを表示しないにチェックを入れてOKボタンを押します。

ライセンスへの同意

以下のパッケージをインストールするには、ライセンス条項に同意する必要があります。

という画面がでたら「同意する」をクリックします。

続いて同じ要領で

web driver

で検索して

Selenium.WebDriver

Selenium.Chrome.WebDriver

Selenium.WebDriver.ChromeDriver

もインストールします。

ここまでインストールして初めて

using OpenQA.Selenium.Chrome;

をソースコードの中に記述してもエラーがVS上に出なくなります。

using 参照でエラーになる人は試してみてください。

ネットでセレニウムの使い方を解説しているサイトを調べてみるとコンソール(Console)アプリケーションでC#+Seleniumの設定方法をまとめているサイトが多かったです。

個人的には、Windows フォームアプリケーションでUIがあった方が管理が楽でいいと思います。

これでガリガリC#+Seleniumのコードをかけます。

頑張りましょう!