最近のプロジェクトチームは、需要側は、使用するプロセスの下でオンライン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