検索
ホームページウェブフロントエンドjsチュートリアルノード クローラーの詳細 - ログイン

前の記事のノードエントリシナリオ - クローラーでは、最も単純なノード クローラーの実装を紹介しました。この記事では、元のベースにさらに進み、ログインをバイパスしてログイン領域のデータをクロールする方法について説明します

ディレクトリ

  • 理論的根拠

    • ログインステータスを維持する方法

    • ブラウザはどのようにしてそれを行うのでしょうか?

    • にログインします。インターフェース
    を取得して
  • Cookie

    • エリアのログインインターフェースをリクエスト

      認証コードがある場合解除方法

    • 拡張機能

    概要
  • 1.理論的根拠

  • ログインステータスを維持する方法
  • プロトコルとして、クライアントとサーバーの間で長い接続は維持されません。サーバーは、独立したリクエストとレスポンスの間でどのインターフェースが同じクライアントからのものかをどのように識別しますか?あなたは賢いので、次のメカニズムを簡単に考えることができます:

session

Id.png

このメカニズムの核心はセッションID (sessionId)にあります:

クライアントがサーバーをリクエストするとき、サーバーは、クライアントが sessionId を渡していないと判断し、セッション ID を生成してメモリに保存し、この sessionId をクライアントに返します

ノード クローラーの詳細 - ログイン
クライアントは sessionId を取得します。次のリクエストを行うときに、このセッション ID がサーバーから取得され、ローカルに保存されます。サーバーは、セッション ID がメモリに存在するかどうかを確認します (前のステップで、ユーザーがログイン インターフェイスにアクセスした場合、メモリにはセッション ID が存在します)。セッション ID を

キー

、ユーザー データを値 として保存されているため、サーバーはセッション ID

の固有の識別子に基づいてクライアントに対応するデータを返すことができます。 sessionId を指定すると、前の手順が繰り返されます。誰も知らないので、最初からやり直します
  1. まず、クライアントは sessionId を介してサーバーとの関連付けを確立し、次にユーザーによってクライアントとサーバー間の関連付けを確立します。 (セッション ID とユーザー データのキーと値のペア)、ブラウザーはどのようにして維持されるのでしょうか? 実際、ブラウザーは上記のメカニズムに従って設計されていますか?
  2. bs-sid.png
  3. ブラウザは何をしますか?

    1. すべての http リクエストで、ブラウザはリクエスト アドレスのドメイン名に対応する Cookie を追加します。上の図では、サーバーへの最初のリクエストにもリクエスト ヘッダーに Cookie が含まれていますが、Cookie には sessionId がありません。2. ブラウザはサーバーの応答ヘッダーに従って応答します。

    Set
  4. -Cookie の
Set
-Cookie は、Cookie を設定します。この目的のために、サーバーは、生成された sessionId を Set-Cookie に入れます。ブラウザは Set-Cookie 命令を受信すると、ローカル Cookie を設定します。通常の状況では、サーバーが Set-cookie を返すとき、sessionId の有効期限はブラウザが閉じられたときに期限切れになるように設定されます。これが理由です。は、開始から終了までのセッションです (一部の Web サイトでは、長期間にわたって Cookie の有効期限が切れないように設定して、ログインしたままにすることもできます)

3. ブラウザーがバックグラウンドで再度リクエストを開始すると、リクエストヘッダーには既にセッション ID が含まれています。ユーザーが以前にログイン インターフェイスにアクセスしたことがある場合、そのセッション ID に基づいてユーザー データが照会されます

例は次のとおりです。まず、

chr

ome によって開かれたログイン ページを使用して、アプリケーション内で http://www.jianshu を見つけ、[ネットワーク] 項目を入力して、ログの保存にチェックを入れます (そうしないと、後で以前のログを見ることができなくなります)。ページはリダイレクトされます)

ノード クローラーの詳細 - ログイン

ログイン

2) 次に、ページを更新してサインイン インターフェイスを見つけます。応答ヘッダーには多くの Set-Cookie があります

ノード クローラーの詳細 - ログイン

ログイン

3) Cookie を再度確認すると、次回 他のインターフェースをリクエストするとき (確認コードの取得、ログインなど)、セッション ID が保存されます。このセッション ID、ユーザーの情報はログイン後のセッション ID にも関連付けられます

ノード クローラーの詳細 - ログイン

ログイン

次に、ノードの実装

ブラウザの動作方法をシミュレートしてアクセスする必要があります。 Web サイトのログイン領域
テスト用に検証コードのない Web サイトが見つかりました。 検証コードのある Web サイトには、検証コードの識別も含まれます (ログインは考慮されていません。検証コードの複雑さは次のセクションで説明されます

)。
    // 浏览器请求报文头部部分信息
    var browserMsg={
        "User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36",
        'Content-Type':'application/x-www-form-urlencoded'
    };

    //访问登录接口获取cookie
    function getLoginCookie(userid, pwd) {
        userid = userid.toUpperCase();
        return new Promise(function(resolve, reject) {
            superagent.post(url.login_url).set(browserMsg).send({
                userid: userid,
                pwd: pwd,
                timezoneOffset: '0'
            }).redirects(0).end(function (err, response) {
                //获取cookie
                var cookie = response.headers["set-cookie"];
                resolve(cookie);
            });
        });
    }
  1. サーバーがこれらのリクエスト ヘッダー情報を検証する可能性があるため、Chrome でリクエストをキャプチャし、いくつかのリクエスト ヘッダー情報を取得する必要があります。たとえば、私が実験した Web サイトでは、最初に User-Agent を渡さなかったのですが、サーバーはリクエストがサーバーからのものではないことを検出し、一連の エラー メッセージ を返したので、後で User-Agent を設定しました。 -エージェントとChromeブラウザに偽装~~

  2. superagentは、クライアントサイドのHTTPリクエストライブラリです。これを使用すると、簡単にリクエストを送信したり、Cookieを処理したりできます(httpを呼び出してヘッダフィールドのデータを操作するのはあまり便利ではありません)。自分で設定してください - Cookie を作成した後、それらを適切な形式の Cookie に組み立てる必要があります。 redirects(0)は主にリダイレクトしないように設定しています

ログインエリアのインターフェースをリクエストします

    function getData(cookie) {
        return new Promise(function(resolve, reject) {
            //传入cookie
            superagent.get(url.target_url).set("Cookie",cookie).set(browserMsg).end(function(err,res) {
                var $ = cheerio.load(res.text);
                resolve({
                    cookie: cookie,
                    doc: $
                });
            });
        });
    }

前手順でset-cookieを取得した後、getDataメソッドを渡し、スーパーエージェント経由のリクエストに設定します(set-cookie は Cookie にフォーマットされます)、通常はログイン データを取得できます

実際のシナリオでは、Web サイトごとに異なるセキュリティ対策があるため、それほどスムーズではない可能性があります。たとえば、一部の Web サイトでは、次のことが必要になる場合があります。トークンの場合、一部の Web サイトではパラメータを暗号化する必要があり、一部の Web サイトではより高いセキュリティが必要で、リプレイ防止メカニズムが備えられています。方向性クローラーでは、Web サイトの処理メカニズムを詳細に分析する必要があります。それを回避できない場合でも、十分です~~
しかし、一般的なコンテンツと情報を含む Web サイトを扱うにはまだ十分です

。上記のメソッドでリクエストされたのは単なる段落の htmlstring です。ここではまだ古いメソッドが使用されています。cheerio ライブラリを使用して文字列をロードすると、jquerydom に似た object を取得でき、 jquery のような dom、これはまさに良心によって作られたアーティファクトです。

3. 認証コードがある場合、それを破る方法

認証コードを入力せずにログインできる Web サイトは何個ありますか?もちろん、12306 の認証コードを特定しようとはしません。このような良心的な認証コードは期待できません。Zhihu のような若すぎて単純すぎる認証コードにも挑戦できます。

TesseractはGoogleのオープンソースOCR認識ツールですが、nodeとは関係ありませんが、具体的な使用方法はノード クローラーの詳細 - ログインnode.js
を使って簡単な検証コード認識を実装します

。 graphicsmagick を使用した場合でも、

images

の前処理は高い認識率を保証しません。このため、tesseract をトレーニングすることもできます。参考: jTessBoxEditor ツールを使用して Tesseract3.02.02 サンプルをトレーニングし、検証コードの認識率を向上させることはできますか?認識率の高さはあなたのキャラクターに依存します~~~ 4 番目に、拡張機能

ログイン状態をバイパスする簡単な方法があります。PhantomJS は、Webkitapi をベースにしたオープンソース サーバー JS です。 、ブラウザと考えることができますが、js スクリプトを通じて制御できます。

ブラウザの

動作

を完全にシミュレートするので、set-cookieやCookieについては全く気にする必要はありません。ユーザーのクリック操作をシミュレートするだけで済みます(もちろん認証コードがあれば、まだ識別する必要があります)

このメソッドには欠点がないわけではありません。つまり、必要のない JS、CSS、および画像の 静的リソースを読み込む必要がありません。複数回クリックすると目的のページに到達する可能性がありますが、目的のURLに直接アクセスするよりも効率は低くなります

興味があれば検索してください

phontomJS

5. まとめ

のログインについて話していますが。ノード クローラー、前の原理はたくさん説明されていますが、その目的は、別の言語に変更したい場合に、簡単に変更できるようにすることです。繰り返しになりますが、原理を理解することが重要です

ディスカッション用のメッセージです。役に立った場合は、いいねを残してください~~

以上がノード クローラーの詳細 - ログインの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
Python vs. JavaScript:開発環境とツールPython vs. JavaScript:開発環境とツールApr 26, 2025 am 12:09 AM

開発環境におけるPythonとJavaScriptの両方の選択が重要です。 1)Pythonの開発環境には、Pycharm、Jupyternotebook、Anacondaが含まれます。これらは、データサイエンスと迅速なプロトタイピングに適しています。 2)JavaScriptの開発環境には、フロントエンドおよびバックエンド開発に適したnode.js、vscode、およびwebpackが含まれます。プロジェクトのニーズに応じて適切なツールを選択すると、開発効率とプロジェクトの成功率が向上する可能性があります。

JavaScriptはCで書かれていますか?証拠を調べるJavaScriptはCで書かれていますか?証拠を調べるApr 25, 2025 am 12:15 AM

はい、JavaScriptのエンジンコアはCで記述されています。1)C言語は、JavaScriptエンジンの開発に適した効率的なパフォーマンスと基礎となる制御を提供します。 2)V8エンジンを例にとると、そのコアはCで記述され、Cの効率とオブジェクト指向の特性を組み合わせて書かれています。3)JavaScriptエンジンの作業原理には、解析、コンパイル、実行が含まれ、C言語はこれらのプロセスで重要な役割を果たします。

JavaScriptの役割:WebをインタラクティブでダイナミックにするJavaScriptの役割:WebをインタラクティブでダイナミックにするApr 24, 2025 am 12:12 AM

JavaScriptは、Webページのインタラクティブ性とダイナミズムを向上させるため、現代のWebサイトの中心にあります。 1)ページを更新せずにコンテンツを変更できます。2)Domapiを介してWebページを操作する、3)アニメーションやドラッグアンドドロップなどの複雑なインタラクティブ効果、4)ユーザーエクスペリエンスを改善するためのパフォーマンスとベストプラクティスを最適化します。

CおよびJavaScript:接続が説明しましたCおよびJavaScript:接続が説明しましたApr 23, 2025 am 12:07 AM

CおよびJavaScriptは、WebAssemblyを介して相互運用性を実現します。 1)CコードはWebAssemblyモジュールにコンパイルされ、JavaScript環境に導入され、コンピューティングパワーが強化されます。 2)ゲーム開発では、Cは物理エンジンとグラフィックスレンダリングを処理し、JavaScriptはゲームロジックとユーザーインターフェイスを担当します。

Webサイトからアプリまで:JavaScriptの多様なアプリケーションWebサイトからアプリまで:JavaScriptの多様なアプリケーションApr 22, 2025 am 12:02 AM

JavaScriptは、Webサイト、モバイルアプリケーション、デスクトップアプリケーション、サーバー側のプログラミングで広く使用されています。 1)Webサイト開発では、JavaScriptはHTMLおよびCSSと一緒にDOMを運用して、JQueryやReactなどのフレームワークをサポートします。 2)ReactNativeおよびIonicを通じて、JavaScriptはクロスプラットフォームモバイルアプリケーションを開発するために使用されます。 3)電子フレームワークにより、JavaScriptはデスクトップアプリケーションを構築できます。 4)node.jsを使用すると、JavaScriptがサーバー側で実行され、高い並行リクエストをサポートします。

Python vs. JavaScript:ユースケースとアプリケーションと比較されますPython vs. JavaScript:ユースケースとアプリケーションと比較されますApr 21, 2025 am 12:01 AM

Pythonはデータサイエンスと自動化により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、データ処理とモデリングのためにNumpyやPandasなどのライブラリを使用して、データサイエンスと機械学習でうまく機能します。 2。Pythonは、自動化とスクリプトにおいて簡潔で効率的です。 3. JavaScriptはフロントエンド開発に不可欠であり、動的なWebページと単一ページアプリケーションの構築に使用されます。 4. JavaScriptは、node.jsを通じてバックエンド開発において役割を果たし、フルスタック開発をサポートします。

JavaScript通訳者とコンパイラにおけるC/Cの役割JavaScript通訳者とコンパイラにおけるC/Cの役割Apr 20, 2025 am 12:01 AM

CとCは、主に通訳者とJITコンパイラを実装するために使用されるJavaScriptエンジンで重要な役割を果たします。 1)cは、JavaScriptソースコードを解析し、抽象的な構文ツリーを生成するために使用されます。 2)Cは、Bytecodeの生成と実行を担当します。 3)Cは、JITコンパイラを実装し、実行時にホットスポットコードを最適化およびコンパイルし、JavaScriptの実行効率を大幅に改善します。

JavaScript in Action:実際の例とプロジェクトJavaScript in Action:実際の例とプロジェクトApr 19, 2025 am 12:13 AM

現実世界でのJavaScriptのアプリケーションには、フロントエンドとバックエンドの開発が含まれます。 1)DOM操作とイベント処理を含むTODOリストアプリケーションを構築して、フロントエンドアプリケーションを表示します。 2)node.jsを介してRestfulapiを構築し、バックエンドアプリケーションをデモンストレーションします。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール