セレン識別コードログイン

[はじめに]

認証コードのログイン画面があり、非常に面倒な問題で、その解決策は以下のとおりです。

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()
    メイン(ドライバ)

おすすめ

転載: blog.csdn.net/qq_35577990/article/details/89613714