Aufgezeichnetes Video: Klicken Sie hier, um zu gehen
查看历史消息
. Klicken Sie, um diese Webseite zu öffnen und weiter zu scrollen, um alle veröffentlichten Artikel anzuzeigen. In diesem Schritt wird basierend auf Anyproxy der HTML-Code der Webseite geändert und ein JS-Skript eingefügt, damit die Seite kontinuierlich nach unten scrollt. Beim Scrollen nach unten wird eine Liste aller Artikel abgerufen. Im Wesentlichen ein Man-in-the-Middle-Angriff.Wie im Bild gezeigt:
Holen Sie sich die Artikellisten-Demo:
Öffnen Sie die Artikellinks nacheinander:
Der erste Schritt besteht darin, Anyproxy erfolgreich zu installieren. Bitte lesen Sie das offizielle Tutorial von Anyproxy im Detail. Es ist sehr detailliert geschrieben, um sicherzustellen, dass Sie https erfolgreich Proxy durchführen und den Hauptinhalt von https anzeigen können.
yarn install
yarn start
Eine result.html wird automatisch geöffnet, um den Inhalt der gecrawlten Artikel in Echtzeit anzuzeigen. Klicken Sie auf, um historische Nachrichten anzuzeigen. Nach dem Scrollen wird die Seite weiter gescrollt Die Artikel werden einzeln geöffnet und der Inhalt gecrawlt.
1. Der erste Schritt besteht darin, alle historischen Artikel eines öffentlichen Kontos zu erhalten. Überprüfen Sie auf dem realen Computer, auf dem der Anyproxy-Proxy eingerichtet wurde, die historischen Nachrichten. Zu diesem Zeitpunkt öffnet WeChat die Webseite mit dem historischen Artikel. Holen Sie sich ein HTML-Dokument: , var msgList
sind die historischen Artikeldaten, die wir benötigen, ein einfacher regulärer Abgleich wird verwendet, um illegale Zeichen zu ersetzen, und JSON.parse wird in das von uns benötigte Format konvertiert. Basierend auf Anyproxy fügen wir ein Skript in dieses HTML-Dokument ein, damit die Webseite von selbst nach unten scrollt und der Browser veranlasst, weitere Artikel abzurufen.
var scrollKey = setInterval ( function ( ) {
window . scrollTo ( 0 , document . body . scrollHeight ) ;
} , 1000 ) ;
Wenn die Webseite bis zum Ende gescrollt wird, wird der Artikel erneut abgerufen. Zu diesem Zeitpunkt handelt es sich um die gleiche Abrufanforderung, aber das Format mit dem Inhaltstyp wird wie folgt zurückgegeben: application/json
. Hier wird die gleiche Methode verwendet Finden und formatieren Sie es in das von uns benötigte Format.
Wenn can_msg_continue
0 ist, bedeutet dies gleichzeitig, dass es nach unten gezogen wurde und alle Artikel abgerufen wurden.
Zu diesem Zeitpunkt liegen alle Artikel eines öffentlichen Kontos vor, einschließlich Artikeltitel, Autor und URL. Es gibt jedoch keine Lesungen und Likes. Sie müssen den jeweiligen Artikellink öffnen, um ihn anzuzeigen.
socket . on ( 'url' , function ( data ) {
window . location = data . url ;
} ) ;
Die Anzahl der Lesevorgänge und Likes kann auf der Browserseite kontinuierlich überprüft werden, um zu sehen, ob die DOM-Elemente gerendert und dann gesammelt und an den Server gesendet werden. Sie können sie auch direkt mit anyproxy überprüfen (ich verwende hier die erstere Methode).
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 ) ;
Das Prinzip ist sehr einfach. Basierend auf echten Maschinen-Crawlern, Man-in-the-Middle-Angriffen und dem Einschleusen von Javascript-Skripten kann der Browser den menschlichen Betriebsprozess simulieren.
// 删除微信网页的安全策略
delete header [ 'Content-Security-Policy' ] ;
delete header [ 'Content-Security-Policy-Report-Only' ] ;
header [ 'Expires' ] = 0 ;
header [ 'Cache-Control' ] = 'no-cache, no-store, must-revalidate' ;