問題タブ [phantomjs]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ruby - 自動 Web スクレイピングの問題
特定のプロパティを見つけるために、さまざまな状態データベースからさまざまな放棄されたプロパティ情報をスクレイピングするための、かなり大規模な自動化アプリケーションを開発しています。さまざまな形式の自動化を使用して、約 8 つの州の Web サイトの検索スクリプトを既に開発しています。Ruby の Mechanize ライブラリのようなものを使用して自動化を実行することを好みます。これは、これまでに遭遇した中で最も安定した方法だからです。場合によっては、Mechanize でスクレイピングを自動化できず、Watir のようなもの (より具体的には、Vapir と呼ばれる Watir のブランチ) にフォールバックする必要があります。Mechanize は HTTP リクエストのみを作成し、JS 解釈を処理しないため、ソースが JavaScript を検索する必要がある場合に特に Vapir が必要です。
私の問題は、Vapir が Internet Explorer のインスタンスを自動化することです。場合によっては、長時間の検索 (これらの検索の一部は 4,000 以上の検索語のリストに対するものです) の後、IE がロックします。OLE エンジンの問題だと思います。私が受け取るエラーは次のとおりです。
この問題を解決する方法が見つかりません。
私の質問は、ロックアップする自動化された OLE インスタンスの解決策または回避策を誰かが知っているかどうかです。エラーを修正するには、すべての IE プロセスを手動で強制終了し、自動検索を再開する必要があります。
私が知っている代替手段は、(IE ではなく) バックエンドでVapirを介して Firefox を自動化するか、おそらくPhantomJSのようなものに切り替えることです。これらのオプションのいずれかについて意見を持っている人はいますか?
javascript - PhantomJS によって取得されたページで生成された JavaScript エラーをキャプチャするにはどうすればよいですか?
ローカル HTML ファイルをロードし、いくつかの JavaScript ファイルを挿入し、ページのコンテキストでいくつかの JavaScript を実行する PhantomJS スクリプトがあります。実行するJavaScriptは例外を生成しますが、コンソールからの出力のみを取得します。これは、エラーと通常のログを区別していないようで、ファイル、行番号、またはスタックトレースがありません.
私が必要としているのは、これらのエラーをキャプチャまたは区別する方法です。私はすでに試しました:
- PhantomJS スクリプトを try-catch でラップする
- 結果: これに捕まるほど遠くに投げられるものは何もない
window.onerror
関数 を定義する- 結果: 何も起こりません。WebKit はウィンドウに onerror イベントを実装していません
スタック トレースを取得できるように、エラー オブジェクト自体を取得できるようにしたいと考えています。
font-face - PhantomJS スクリーン キャプチャで @font-face をレンダリングするにはどうすればよいですか?
スクリーン キャプチャは素晴らしいですが、カスタムの @font-face フォントがレンダリングされていません。これを修正することは可能ですか?
windows - Phantom JS を使用してフォルダー内のすべての HTML ファイルを PNG に変換する
Windows で Phantom JS を使い始めましたが、その機能に関するドキュメントを見つけるのに少し苦労しています (おそらく問題の原因です)。
Phantom JS を使用して、次のことを行いたいと思います。
- ローカル マシンのフォルダの場所を指定し、
- その場所に移動し、HTML ファイルのリストを特定します。
- そのリストが識別されたら、HTML ファイルのリストをループし、それらすべてを PNG に変換します (rasterize.js の例の動作と同様)。
これはおそらく可能だと確信していますが、Phantom JS 関数呼び出しを見つけることができませんでした。
- フォルダ内のファイルのリストを取得し、
- Phantom JS の gsub と grep の形式。
javascript - Phantomjs での javascriptEnabled の問題
私はphantomjsを使ってウェブサイトからデータをスクレイピングしていました。読み込みを高速化するために、次のようにして Web ページでの js の実行を無効にしました。
しかし、これは問題を引き起こします-関数が何を返すべきかに関係なく、戻りますpage.evaluate(somefunc.toString())
。null
js 設定のデフォルトを true のままにしておくと、page.evaluate()
再び機能します。
これを回避するにはどうすればよいですか? ありがとう
http - 重要なユーザー シナリオの HTML 結果をスクリーン スクレイピングするにはどうすればよいですか
ブラウザーでインタラクティブに行う場合、複数のアクションとページの読み込みを伴うページの HTML を取得できるようにしたいと考えています。 1. ホームページに移動します。 2. ログイン フォームにテキストを入力し、フォームを送信します ( post) 3. 投稿は、さまざまなリダイレクトとフレームセットの使用を通過します。
Cookie は、このプロセス全体で適応されます。
ブラウザーでは、送信後、ページを取得するだけです。
しかし、curl (PHP など)、wget、またはその他の低レベル テクノロジでこれを行うには、Cookie、リダイレクト、およびフレームセットの管理がすべて非常に面倒になり、スクリプトを Web サイトに非常に緊密にバインドします (小さなことでも非常に影響を受けやすくなります)。私がスクレイピングしているウェブサイトの変更。)
誰でもこれを行う方法を提案できますか?
私はすでにCrowbarとPhantomJSとLynx (cmd_log/cmd_script オプション付き) を見てきましたが、Firefox や Chrome で行うことを正確に模倣するためにすべてを連鎖させることは困難です。
(余談ですが、ターゲット Web サイトがこのスクリプトをFirefox や Chrome、または「実際の」ブラウザであると見なすことは、有用/必要でさえあるかもしれません)
jquery - jQuery で XHR をキャプチャしますか?
私は jQuery で PhantomJS を使用していますが、自分で POST/GET を開始せずに、ブラウザに渡される XMLHttpRequest をキャプチャできるかどうか疑問に思っています。
web-crawler - PhantomJS をどのようにスパイダーしますか
PhantomJS を活用して、ドメイン全体をスパイダーしようとしています。www.domain.com などのルート ドメインから開始したい - すべてのリンク (a.href) をプルしてから、新しいリンクを取得するキューを作成し、クロールされていないかキューにない場合は新しいリンクをキューに追加します。 .
アイデア、助けて?
前もって感謝します!
c# - javascript slowAES を使用して、暗号化されたテキストを C# から PhantomJS スクリプトに送信するにはどうすればよいですか?
サーバー上の PhantomJS で実行されるスクリプトを持っています。スクリプトへのコマンド ライン引数としてパスワードを渡す必要があります。PhantomJS に慣れていない方のために説明すると、PhantomJS は、クライアントからの操作なしでサーバー側で実行されるヘッドレス Webkit ブラウザーです。
パスワードを PhantomJS の仮想 Web ページ オブジェクトのコンテキストに読み込むには、特定の Web ページ オブジェクトに含まれる JavaScript ファイルにパスワードを保存する必要があります。パスワード ファイルは、ログインに必要な期間のみ保持され、削除されます。スクリプトがファイルを必要としなくなった後にファイルを削除するフェイルセーフメカニズムがあります。このパスワードを平文で保存したくないので、AES 暗号化を使用します。
パスワードは、AES 暗号化を使用してデータベースに保存されます。この方法でパスワードを保存するのが最も安全な方法ではないことはわかっていますが、スクリプトはパスワードを知る必要があるため、ハッシュはオプションではありません。
ASP.NET MVC3 Web アプリケーションで C# からこの PhantomJS スクリプトを呼び出し、AesManaged または RijndaelManaged を使用して C# から暗号化されたパスワードを渡したいと考えています。私は暗号化の基本を理解しており、C# と JavaScript でコードを動作させることができました。ただし、C# からテキストを暗号化すると、javascript で復号化できません。例として、私の C# コードの一部を次に示します。
JavaScript コードは、slowAES 実装を使用します。
JavaScript のこのコードは、暗号化と復号化の簡単なテストを実行できるようにセットアップしただけです。C# と JavaScript の間で暗号化と復号化が機能するようになったら、PhantomJS からのコマンド ライン引数としてパスワードを処理します。
キーと IV は次のとおりです。
テキスト 'test' の暗号化を実行した後の C# コードの出力は次のとおりです。
JavaScript からの出力は次のとおりです。
slowAES は PKCS7 パディングを使用するため、C# コードに PKCS7 パディングを適用しました。PKCS7 パディングの独自の実装を使用してみましたが、同じ結果のバイト配列は得られませんでした。何か不足している場合はお知らせください。どうもありがとう。
maven - maven/qunit/phantomjs を統合するより良い方法は?
Maven CI 環境で JS 単体テストを行うための最良の方法を調査してきました。私が現在一緒に石畳になっているのは、私のmavenプロジェクトで次のとおりです。
- qunit リソース (JS/CSS ファイル)
- 必要に応じて html フィクスチャを含む qunit テスト html ファイル (テスト対象のファイルごとに 1 つ)
- ハイパーリンクの順序付きリストとしてテスト html ファイルを参照するインデックス html ファイル
- PhantomJS ランナー ファイル:
- index html ファイルを開き、テスト ファイルのリストを解析します。
- 各テストファイルを開く
- 各ファイルの qunit テスト結果のスクリーンショットを取得します
- 障害が発生した場合は、ステータス「1」で終了します
- 異常が無ければステータス「0」で終了
- phantomjs がインストールされていない場合は「0」で終了し、インストールされている場合は phantomjs テストを呼び出すシェル ファイル
ビルドのテスト段階で phantomjs テストを実行するように pom.xml を変更します。
/li>
したがって、これはうまく機能します。これは、開発マシンとビルド マシンでのビルド中に qunit テストを実行します (PhantomJS がインストールされている限り)。テストはヘッドレス ブラウザ環境で実行され、qunit テストに制限はありません。私が見た他の maven/qunit 統合は、Rhino でテストを実行したり、作成できるテストの種類に制限を課す他の JS 環境が原因で不十分です。さらに、phantomjs を使用すると、テスト実行のスクリーンショットを取得できます。これは、障害のトラブルシューティングに役立ちます。
私のアプローチの欠点は、ビルド/開発マシンに PhantomJS をインストールする必要があることです。開発者が PhantomJS のインストールについて心配する必要がないように、phantomJS を依存関係にバンドルする方法がわかりません。誰かが私にこの方向へのプッシュを与えることができますか? どうすれば始められますか?