録画されたビデオ: クリックして移動
查看历史消息
機能が用意されています。クリックしてこの Web ページを開き、スクロールを続けると公開されたすべての記事が表示されます。このステップでは、anyproxy に基づいて Web ページの HTML が変更され、ページが下にスクロールし続けると、すべての記事のリストが取得されるようにするための js スクリプトが挿入されます。 本質的には中間者攻撃です。図に示すように:
記事リストのデモを取得します。
記事のリンクを 1 つずつ開きます。
最初のステップは、anyproxy を正常にインストールすることです。このステップについては、https を正常にプロキシし、https の本体コンテンツを表示できるように詳細に書かれている anyproxy のチュートリアルを読んでください。
yarn install
yarn start
result.html が自動的に開き、クロールされた記事の内容をリアルタイムで表示します。その後、履歴ページが最後までスクロールされます。記事が 1 つずつ開かれ、コンテンツがクロールされます。
1. 最初のステップは、公開アカウントのすべての過去の記事を取得することです。 anyproxy プロキシが設定されている実マシンで、履歴メッセージを確認します。この時点で、WeChat は履歴記事の Web ページを開きます。 HTML ドキュメントを取得します。 var msgList
必要な履歴記事データです。単純な正規一致を使用して不正な文字が置き換えられ、JSON.parse が必要な形式に変換されます。 anyproxy に基づいて、Web ページを自動的に下にスクロールさせ、ブラウザをトリガーしてさらに記事を取得することを目的として、この HTML ドキュメントにスクリプトを挿入します。
var scrollKey = setInterval ( function ( ) {
window . scrollTo ( 0 , document . body . scrollHeight ) ;
} , 1000 ) ;
Web ページを最後までスクロールすると、再度記事が取得されます。このときも同じ get リクエストですが、Content-Type がapplication/json
の形式で返されます。ここでは、通常のマッチングが使用されます。それを見つけて、必要な形式にフォーマットします。
同時に、 can_msg_continue
が 0 の場合は、一番下まで引っ張られてすべての記事が取得されたことを意味します。
この時点で、記事のタイトル、著者、URL を含む、公開アカウントのすべての記事が取得されました。ただし、閲覧数やいいね数はありません。閲覧するには特定の記事のリンクを開く必要があります。
socket . on ( 'url' , function ( data ) {
window . location = data . url ;
} ) ;
閲覧数といいね! はブラウザ側で継続的にチェックして、DOM 要素がレンダリングされ、収集されてサーバーに送信されているかどうかを確認できます。また、anyproxy を使用して直接チェックすることもできます (ここでは前者の方法を使用します)。
key = setInterval ( function ( ) {
var readNum = $ ( '#readNum3' ) . text ( ) . trim ( ) ;
if ( ! readNum ) return ;
var likeNum = $ ( '#likeNum3' ) . text ( ) . trim ( ) ;
var postUser = $ ( '#post-user' ) . text ( ) . trim ( ) ;
var postDate = $ ( '#post-date' ) . text ( ) . trim ( ) || $ ( '#publish_time' ) . text ( ) . trim ( ) ;
var activityName = $ ( '#activity-name' ) . text ( ) . trim ( ) ;
var js_share_source = $ ( '#js_share_source' ) . attr ( 'href' ) ;
socket . emit ( 'crawler' , {
readNum : readNum ,
likeNum : likeNum ,
postUser : postUser ,
postDate : postDate ,
activityName : activityName ,
js_share_source : js_share_source
} ) ;
} , 1000 ) ;
原理は非常にシンプルで、実際のマシンのクローラー、中間者攻撃、および JavaScript スクリプトの挿入に基づいて、ブラウザーに人間の操作プロセスをシミュレートさせます。
// 删除微信网页的安全策略
delete header [ 'Content-Security-Policy' ] ;
delete header [ 'Content-Security-Policy-Report-Only' ] ;
header [ 'Expires' ] = 0 ;
header [ 'Cache-Control' ] = 'no-cache, no-store, must-revalidate' ;