PythonクローラーがCloudflareメールボックス暗号化を処理する方法

最近、小さなクローラーを作成しました。メールボックス情報を取得する必要がありますが、取得できず、ajaxインターフェイスではありません。最後に、情報を確認したところ、Cloudflareによって暗号化されていることがわかりました。暗号化がある場合は、復号化する必要があります。

レモン無関心:

この復号化メソッドは、そのjsコードから変換されます

主な文

for(e =”、r = '0x' + a.substr(0、2)| 0、n = 2; a.length – n; n + = 2)e + = '%' +( '0' + ( '0x' + a.substr(n、2)^ r).toString(16))。slice(– 2);

最初の2桁が16進数に変換された後、それが秘密鍵になります。次の2文字が秘密鍵とXORされた後、16進数に変換されてから、文字に変換されます。

最後に、解決されたすべての文字をまとめると、メールボックス[email protected]が取得されます。

ここのjsはurlencodeを使用しています

以下は、再現されたjs復号化コードです。

function jiemi(val){for(e = ''、r = '0x' + val.substr(0、2)| 0、n = 2; val.length-n; n + = 2)e + = '% '+(' 0 '+(' 0x '+ val.substr(n、2)^ r).toString(16))。slice(-2); decodeURIComponent(e)を返す}


次に、Pythonを介してjsを呼び出して、完全に取得します。

import execjs def get_js():#f = open( "./../ js / my.js"、 'r'、encoding = 'utf-8')#​​JSファイルを開きますf = open( "./ jiemi。 js "、 'r'、encoding = 'utf-8')#​​JSファイルを開くline = f.readline()htmlstr = '' while line:htmlstr = htmlstr + line line = f.readline()return htmlstr def get_des_psswd( e):js_str = get_js()ctx = execjs.compile(js_str)#Load JS file return(ctx.call( 'jiemi'、e))#jsメソッドを呼び出す最初のパラメーターは、JSのメソッド名であり、背後にあるデータです。そして、キーは、__ name__ == '__ main__'の場合のjsメソッドのパラメーターです。print(get_des_psswd(e = '30515253705152531e535f5d'))


以上が本稿の全内容ですので、皆様のご勉強に役立てていただければ幸いです。


おすすめ

転載: blog.51cto.com/14825302/2542688