2016-04-28 13 views
1

ウェブサイトから電子メールを盗聴する必要があります。 これは、ブラウザに表示さだが、私がリクエストでそれをこすりしようとすると、\ BeautifulSoup私はこれを取得:保護された電子メールの盗用

私はセレンでこれを行うことができますが、それはより多くの時間がかかりますし、私が知りたいのですが、「[電子メール が保護されました]」要求\ BeautifulSoupでこれらの電子メールを削ることは可能ですか?おそらく、jsを扱うためにいくつかのライブラリを使う必要があります。

メールタグ:CFタグから

<span id="signature_email"><a class="__cf_email__" href="/cdn-cgi/l/email-protection" data-cfemail="30425f5e70584346515c5c531e535f5d">[email&#160;protected]</a><script data-cfhash='f9e31' type="text/javascript">/* <![CDATA[ */!function(t,e,r,n,c,a,p){try{t=document.currentScript||function(){for(t=document.getElementsByTagName('script'),e=t.length;e--;)if(t[e].getAttribute('data-cfhash'))return t[e]}();if(t&&(c=t.previousSibling)){p=t.parentNode;if(a=c.getAttribute('data-cfemail')){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);p.replaceChild(document.createTextNode(decodeURIComponent(e)),c)}p.removeChild(t)}}catch(u){}}()/* ]]> */</script></span></span> <span class="separator">|</span> 
+0

は、メーリングリストからこれらのメールはありますか?あなたはメーリングリストからそれらを単に取り出すことはできませんか? – Cyrbil

+0

いいえ、メールはウェブページにあります。 – GiveItAwayNow

+0

リクエストを行った場所にコードを表示できますか?ユーザーエージェントを含めましたか?また、ページへのリンクが役に立つので、電子メールの表示方法を見ることができます – Keatinge

答えて

4

は、あなたの供給のhtmlで、私はあなたがCloudFlareのサイトをスクレイピングしていると仮定します。彼らは、HTML内のアドレスを暗号化し、JavaScriptを使用してそれを解読する電子メール(see here)を難読化する機能を提供しています。したがって、セレンを使用すると、電子メールアドレスが表示されますが、要求は使用しません。

解読方法はJavaScriptから簡単に取れるので、Pythonで独自の解読メソッドを書くことができます。 JavaScriptで

、Pythonで

(function() { 
    try { 
     var s, a, i, j, r, c, l = document.getElementById("__cf_email__"); 
     a = l.className; 
     if (a) { 
      s = ''; 
      r = parseInt(a.substr(0, 2), 16); 
      for (j = 2; a.length - j; j += 2) { 
       c = parseInt(a.substr(j, 2), 16)^r; 
       s += String.fromCharCode(c); 
      } 
      s = document.createTextNode(s); 
      l.parentNode.replaceChild(s, l); 
     } 
    } catch (e) {} 
})(); 

def decodeEmail(e): 
    de = "" 
    k = int(e[:2], 16) 

    for i in range(2, len(e)-1, 2): 
     de += chr(int(e[i:i+2], 16)^k) 

    return de 
+0

素晴らしい!曽和、ありがとう!それは完全に動作します。 – GiveItAwayNow

関連する問題