問題タブ [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.
javascript - phantom.jsのリンクをクリックして、ドキュメントのhtmlを取得します
私はphantom.jsを初めて使用し、Webサイトページをナビゲートして、phantom.jsのリンク(AJAX関数を呼び出してドキュメントのHTMLを変更する)をクリックしようとしています。
これが私のコードです:
私の「アクション」関数のように、私は非常に混乱しています。click()呼び出しは、そのエラーを3回繰り返し発生させます。
TypeError:'undefined'は関数ではありません
phantomjs://webpage.evaluate():3 phantomjs://webpage.evaluate():1
ph.js:121 nullTypeError:'undefined'は関数ではありません
phantomjs://webpage.evaluate():3 phantomjs://webpage.evaluate():1
ph.js:121 nullTypeError:'undefined'は関数ではありません
phantomjs://webpage.evaluate():3 phantomjs://webpage.evaluate():1
ph.js:121 null
また、クリックを送信するときにその行にコメントを付けると、アクション関数はエラーを発生させなくなり、「クリックされた」コンソールログを適切に返します。でも3回...
私は何を間違っているのですか?
前もって感謝します。
javascript - PhantomJS が認証ヘッダーを送信しない
PhantomJS で HTTP 認証が必要な Web ページを開こうとしています。私のスクリプトは、loadspeed.js の例に基づいています。
レンダリングされた page.jpg から、毎回 401 を取得していることがわかります。また、Wireshark を使用して HTTP セッションをトレースしたところ、特定の URL への GET 要求で認証ヘッダーが送信されていないことがわかりました。
ここで何が間違っていますか?私は PhantomJS を使い始めたばかりですが、一晩中検索していて、遠くまでは行きませんでした...
javascript - 関数は1回呼び出されますが、複数回起動します
以下は、PhantomJSスクリプトのスニペットです。AJAXdWebページの動的コンテンツを追跡します。track()は1回呼び出されますが、何らかの理由でpage.open()は3回呼び出されます
以下をコンソールに記録します。
どういうわけかわかりませんが、page.open()が3回呼び出されています。
javascript - phantomjs からの制御された非同期終了
私はphantomjsでいくつかのテストをしようとしています...基本的に私はしたいです:
- 私のウェブサーバーでページを開く
- ページが初期化されると (すべてのページ js が読み込まれます)
- phantomjs からページ js を呼び出して結果をテストする
- ファントムjsを終了
ページが読み込まれたときにphantomjsが気付くのは難しいようです。
phantomjs を使用して、ウィンドウなどに「テスト」変数を設定し、ページ js がそれをチェックして、完了したらコールバックを呼び出すことができます。問題は、コールバックがページ コールバックにしかできないことです。そのため、ページで実行できないことは何も実行できません。
それはテスにとっては問題ないかもしれませんが、最後のステップは不可能です。
私はこれを思いついた:
したがって、ページ コードは window.quit() を呼び出すことができ、コンソール モニターはファントムを強制終了できます。ただし、これは少しハッキーなようです。誰かがそれを行うためのより良い方法を持っていますか?
javascript - 純粋な JS の jQuery ":contains()" アナログ
CasperJS のスクリプトを書いています。「1」のスパンを含むリンクをクリックする必要があります。jQueryでは使用できますが:contains('1')
、純粋なJavascriptのセレクターの解決策は何ですか?
HTML:<a class="swchItem"><span>1</span></a><a class="swchItem"><span>2</span></a>
jQuery バリアント:$('a .swchItem span:contains("1")')
UPD CasperJS コード:
phantomjs - PhantomJS 呼び出しから injectJS への変数の公開
開始ページから jQuery を挿入する例に従ってみましたが、問題なく動作します。同じディレクトリにjQueryのローカルコピーがあり、次のようなことをしています...
独自のスクリプトを挿入しようとすると、どの機能も使用できません。myScript.js という名前のスクリプトがあるとします。
その後、次のようなdoSomethingを使用できません...
私はもう試した
と
運が悪いだけでなく、後続の page.evaluate() で window.doSomething() または document.doSomething() でそれらを呼び出そうとします。
jquery - PhantomJS を使用して JQuery を Amazon.com ページに挿入すると、JQuery で問題が発生する
Amazon.com ドメイン (「http://www.amazon.com」など) の任意のページを開き、次のように JQuery を挿入しようとしています。
このコードはtrue
コンソールに出力されます。ただし、次のように内部からアクセスしようとしてい$(document)
ますpage.evaluate()
:
TypeError: 'undefined' is not a function
コンソールに出力します。
このコードは、私が試した他のほとんどのドメインで動作します。Amazon がロードする独自のバージョンの JQuery を持っているようで、私がロードしている JQuery のバージョンと何らかの形で競合しているのではないかと思いました。何か案は?
mongodb - PhantomJS を使用して MongoDB に接続する方法
私はOSXを実行しています。どこかでドキュメントを見つけることができると思っていましたが、できませんでした。
dom - マイニング/クロール/phantomjs などを使用した Web コンソール?
別の Web アプリケーションの動作に直接関係するアプリケーションを作成したいと考えています。基本的に、Gmail 内で実行され、ユーザーのアクションに基づいてインターフェースと動的に対話するアプリケーションがあります。
私が直面している問題は、その Web アプリケーションとやり取りするアプリケーションを作成したいのですが、オープン API を提供していないことです。そのため、必要なデータの API を呼び出すことはできません。
Chrome で開発コンソールを開くと、実行中のアプリケーションと、アクティビティに基づいて実行されるデバッグ コメントが表示されます。
PhantomJS のようなものを使用してその動的アクティビティをクロールして、別のアプリケーションのアクティビティをベースにする方法はありますか?
「コマンド コンソールでコンソールに「X」と表示されている場合は、この別のアプリケーションで「Z」スクリプトを実行してください。
私は明らかにエンジニアではありませんが、このようなことが可能かどうか考えたいと思っています。
クローズド API を扱う非常にハックな方法です。あなたのコードを見ることも使用することもできませんが、それが機能するのを見ることができれば、そのリアルタイムを記録して別のアプリケーションで操作できるのは理にかなっていると思いませんか?
coffeescript - 複数のページでのPhantomJSの予期しないロード動作
3ステップのプロセスでサイトをスクレイプするスクリプト(以下)があります。一度に最大1ページに設定するとうまく機能します。ただし、一度に2に増やすと、状況が不安定になり始めます。onFinishedは予想より早く起動し、ページはまだ完全にロードされていません。このため、残りのスクリプトは中断します。なぜこれが起こっているのか考えていますか?最新バージョン(1.5)を使用していることを追加する必要があります。