[はじめに]
認証コードのログイン画面があり、非常に面倒な問題で、その解決策は以下のとおりです。
1、ユニバーサルセットの開発や認証コードを削除
たTesseract-OCRによって同定2、
図3に示すように、サードパーティインターフェース識別コード
[]実装手順
図1に示すように、コードセクションは、テキストテーマ識別コードを取得し、画像を撮影し、ログイン画面、位置決め要素コードを撮影し、本明細書でテーマ・コードはエラーが発生した場合、ウィンドウのスケール表示のための理由は、コンピュータシステムが提供されるが、位置取得を引き起こし座標が使用される座標テーマはスケーリングされた画像に対応する必要なスケール表示に応じて決定されている間、100%座標表示することにより得られるので、ばらつきがありました。
この問題を解決するための3つの方法があります:
100%にコンピュータディスプレイセットを変更します。これは最も簡単な方法です。
スケーリングで割った幅と高さのサイズに縮小スクリーンショットのサイズを来て、傍受ページ画像をスケーリング。
4つの値のImage.cropパラメータ変更は、パラメータタプルスケール乗算されます。
その後、再取得2、検証コードテキストの取得に失敗し、
3、認証コードが成功し、その後、ログ
以下では、OCRたTesseract単純な識別コードによって説明します。
# - * -コーディング:UTF-8 - * -
#パイソン3.5.0
インポートの再の
インポート要求が
時間インポート
セレン輸入webdriverをからの
PILインポートイメージから、ImageEnhanceの
輸入pytesseract
fileIndex = 0
get_auth_code DEF(ドライバー、CodeElement):
'' 'コードを取得します' ''
グローバルFileIndex
'.pngの' + STR(FileIndex)+:fileNameに= '/ログインD'
#ログイン画面ショット
driver.save_screenshot(fileNameに)
FileIndexを1 + =。
imgSize = codeElement.size#コードを取得した画像サイズ
imgLocation = codeElement.location#取得要素コード座標
rangle =(INT(imgLocation [ ' X'])、INT()imgLocation [ 'Y']、INT(imgLocation [ imgSize [ '幅'])、 INT(imgLocation [ 'Y'] + imgSize [ '高']))# グローバル座標計算コード'X'] +
ログイン= Image.open(filename)で
フレーム4 login.crop =( rangle)#コードの写真を撮影
+ STR(FileIndex ').pngを' +:realFileName = '/ AUTHCODE D'
フレーム4を。(realFileName)#コードを保存保存したスクリーンショット
authcodeImg = Image.open(realFileName)
authCodeText = pytesseract.image_to_string(authcodeImg).strip( )#の識別コード
authCodeText#テキストコードを返す返します
デフ(ドライバー、AUTHCODEを)ログイン:
'' '登录系统' ''
driver.find_element_by_xpath( '// DIV / UL /李[の@クラス= "ユーザー"] /入力')send_keys( "XXXXXXX")。
driver.find_element_by_xpath ( '//div/ul/li[@class="password"]/input').send_keys("123456" )
driver.find_element_by_xpath(' // DIV / UL /李[の@クラス= "yzm"] /入力').send_keys(AUTHCODE)
driver.find_element_by_xpath(' // DIV / UL /李[の@クラス= "ジャンプ"] /ボタン')(クリック)します。
(3)time.sleep
isElementExist(要素)DEF:
フラグ=真
試してみてください。
要素= driver.find_element_by_xpath(要素)
復帰フラグを
除い:
フラグ= Falseの
戻りフラグ
デフget_yzm(ドライバ):
driver.get( 'HTTP://XXXXXXXXXXXXXXXXX/login.html')
driver.maximize_window()
time.sleep(5)
imgElement = driver.find_element_by_xpath(「// DIV / UL /李[@クラス= "YZM"] / IMG「)#測位コード位置
yzm_text = get_auth_code(ドライバ、imgElement) #取得した識別コードテキスト
戻りyzm_textの
DEFのlogin_main(ドライバー):
yzm_text = get_yzm(ドライバ)#コードのテキストを取得し
ながら、LEN(yzm_text)= 4! :コード#4を分析して、コードを再取得するために等しくないに等しい
yzm_text = get_yzm(ドライバ)
ログイン(ドライバ、yzm_text)#ログ検証コード識別4つの文字のある
time.sleep(2)
exit_flag = isElementExist( '// DIV / P [クラス@ = "パスワードヒント"]')# 正しいPINがdivの弾性ブロックをポップアップ表示されます場合は、ブロック確認応答弾性要素が存在する
==真exit_flag場合:
login_flag =真
。driver.find_element_by_xpath( '[クラス= "編集-OFF" @] // DIV / P- /スパン')クリック()#DIV爆弾ボックスがある場合は、ホームに行くために、キャンセルボタンをクリックして
印刷(login_flag)
他:
login_flag =偽
。driver.switch_to_alert()()#を受け入れるあなたは確認コードを入力した場合は正しくない、エラーコードポップ爆弾警告ボックスの
リターンlogin_flag
DEFメイン(ドライバー):
login_flag =なし
しばらくのlogin_flag = Trueの:!
login_flag = login_main(ドライバ)
を印刷( "メイン:" + STR(login_flag )
もし__name__ == '__main__':
ドライバ= webdriver.Chrome()
メイン(ドライバ)