セレン識別コード

最近のプロジェクトチームは、需要側は、使用するプロセスの下でオンラインAPIの識別コードを記録し、それらはデータ収集サイトを実装し、内部の指定されたデータベーステーブルを受け取る助けるために私に尋ね提起しました:

コードは、ログイン画面ショットを開き、内側から検証コードに対応するコンテンツを控除して、サーバーに送信する必要があるので、あなたはログイン画面を開くたびに、異なるコードであることをその手段、ページがロードされるたびに更新されるので、認識。

ログイン画面のスクリーンショットの1、

URL = '' 
ドライバ = webdriver.PhantomJS()
driver.get(URL)
driver.set_window_size( 1200、800) ここでは固定値を設定する必要があり、上記他のマシンで実行している場合は問題となり得る
#1 ログイン画面がロードされたことを確認するために、休止10S 
(10 time.sleepをインターセプトログインインターフェース画面 
screenshot_path = ' screenshot.png ' 
IF os.path.exists(screenshot_path):
    os.remove(screenshot_path)
driver.save_screenshot(screenshot_path)

図2に示すように、スクリーンショットから認証コードが控除します

コード要素については、位置は、取得した座標 
要素driver.find_element_by_xpath =(" // * [@ ID = \"ログイン・コンテンツ\ "] / DIV [2] / DIV [4] / IMGを"  = INT(element.location [ ' X ' ])
トップ = INT(element.location [ ' Y ' ]) = INT(element.location [ ' X ' ] + element.size [ ' ' ])
ボトム = INT(element.location [ ' Y ' ] + element.size [ ' ' ])テーマエリアコードからプルアウト 
= captcha_path ' captcha.png ' 
IF os.path.exists(captcha_path):
    os.remove(captcha_path)
IMG = Image.open(screenshot_path)
IMG = img.crop((左、上、右、下))
img.save(captcha_path)

3、認証のためのライン識別コードのAPIを呼び出します

次のコードから:集計データ - 識別コードのサンプルコード、具体的に公式文書を参照することができます。

デフcaptcha_recognition(APPKEY、CODETYPE、IMAGEPATH):
     ""」
    APIの呼び出しライン識別コード
   :APPKEYプラットフォームアプリケーション:PARAM APPKEY
   :ParamのCODETYPE:タイプコード
   :ParamでIMAGEPATH:検証コード画像パス
   :リターン:結果
    ""」
    もし ないos.path.exists(IMAGEPATH):
         リターン '' 
    captcha_result = '' 
    submitUrl = ' http://op.juhe.cn/vercode/index '   接口地址
    buldポスト身体データ 
    境界= " - ---------%sの"%進(int型(time.time()* 1000年))
    データ = []
    data.append(' - %sの'境界)
    data.append(' コンテンツの廃棄:フォームデータ、名前= "%sの" \ R \ n '' キー' 
    data.append(APPKEY)
    data.append(' - %sの'境界)
    data.append(' コンテンツの廃棄:フォームデータ、名前= "%sの" \ R \ n '' CODETYPE ' 
    data.append(CODETYPE)
    data.append(' - %sの'境界)
    FR =オープン(IMAGEPATH、' RB ' 
    data.append(' コンテンツの廃棄:フォームデータ;ファイル名= "b.png";名= "%s"は'' 画像' 
    data.append(' のContent-Type:%S \ R \ n '' 画像/ PNG ' 
    data.append(fr.read())
    fr.close()
    data.append(' - %S - \ R \ n '境界)
    HTTP_BODY = ' \ rを\ nは' .join(データ)
     してみてください
        REQ =はurllib2.Request(submitUrl、データ= HTTP_BODY)
        req.add_header(' のContent-Type '' マルチパート/フォームデータ;境界=%S '境界)
        req.add_header(' のUser-Agent '' Mozillaの/ 5.0(Macintoshでは、GeckoのようなインテルのMac OS X 10_11_6)のAppleWebKit / 537.36(KHTML、)クローム/ 53.0.2785.143サファリ/ 537.36 ' 
        req.add_header(' リファラー'' http://op.juhe.cn/ ' 
        RESP = urllib2.urlopen(REQ、タイムアウト= 60 
        qrcont = resp.read()
        結果 = json.loads(qrcont、' UTF-8 ' 
        ERROR_CODE =結果[ ' ERROR_CODE ' ]
         もし(ERROR_CODE == 0)。
            データ =結果[ 結果]
            captcha_result = データ
         、他
            ErrorInfo = U " 错误码:%S、描述:%S "%(結果[ ' ERROR_CODE ' ]結果[ ' 理由' ])
             印刷のErrorInfo
     以外Eとして例外:
         プリントEの
     戻り captcha_result

 

おすすめ

転載: www.cnblogs.com/zuichuyouren/p/11888527.html