UIいつクリックして、それを保持し、消えるマウスを放し、背景画像の干渉を取得するためにパズルの必要性のパズルログイン検証コード、確認コードをスライドさせるための自動化につながる不十分な認識精度率が、缶
。1つの #は/ usr / binに/ PythonのENV! 2 #- * -コーディング:UTF-8 - * - 3。 #@time:2019年11月15日夜02時32分 。4 #@Site: 5 #@file:puzzleCaptcha.py 。6 #@Software:PyCharm 7 8 インポートOS 9 インポートCV2 10 インポート時間 11 から PIL インポートイメージ 12 ページデータ上の記憶素子から-created SiteTest.datas.data_Filesインポートするためのパッケージ変更*# 13 から selenium.webdriver インポートActionChains 14 から selenium.webdriver.common.by インポートすることにより 15 16パス= (os.path.dirname(os.getcwd()))とos.path.abspath 。17 18である クラス:puzzleCaptcha() 19。 DEF __init__ (自己): 20である、 21は #定数およびデータローディング素子 22がさ self.data = DATAS()#は、データ要素に基づいて分類することができる経路記憶された 23である self.data = 使用されたパラメータが要求される必要なデータ、インスタンス化self.Data.puzzleCaptchaData()メソッド#作成された実際のデータファイルに応じた値のself.data ****。 24 25 DEFの analog_drag(セルフ、ドライバー、距離、bgImagePath、sliderImagePath): #スライディングプロセス 26 「」 " 27の スライディングプロセス 28 :PARAMドライバー:ブラウザ 29 :からのparam距離スライダーをスライド 30 :PARAM bgImagePath関数pic_getは()パス保存背景画像を取得する 31 のパスの保存画像を取得するためのparam sliderImagePath関数pic_get()スライダー: 32 :リターン:図の背景およびスライダー 33は " "" 34は、 #time.sleep#遅い負荷要素がbuttonDrag見つからない防ぐ(1) 35 buttonDrag = driver.find_element(By.XPATH、self.data.buttonDrag_xpath) 36 ActionChainsを(buttonDrag).move_by_offset .click_and_hold(ドライバ)(距離、0).perform() 37 time.sleepは(1) #は、その後マウスを解放滞留1S後に指定された距離を移動する 38 ActionChains(ドライバ).release(buttonDrag).perform() 39 フラグ= self.ifElementExist(ドライバ、By.XPATH、self.data.succes_xpath) 40 一方TRUE: 41 であればフラグ== FALSE: #拼图不成功一直重试 42 #time.sleep(0.5) 43 driver.refresh() 44 self.pic_get(ドライバ、bgImagePath、sliderImagePath) 45 distance01 = self.move_Distance(bgImagePath、sliderImagePath) 46 self.analog_drag(ドライバ、distance01、bgImagePath、sliderImagePath) 47 他:#着陸後、アカウントのパスワードとパズルの成功を入力します。 48 #time.sleep(0.5) 49 driver.find_element_by_class_name(self.data.userName_class).send_keys(self.data.userName) 50 driver.find_element(By.XPATH、self.data.pwd_xpathを).send_keys(self.data.pwd) 51である driver.find_element(By.XPATH、self.data.btnLogin_xpath).click() 52は、 BREAK 53である (time.sleep。1) #容易要素見つけるために 54である 55 DEF ifElementExist(セルフ、ドライバ、メソッド,, elementPath): 56 「」 " 57 見つける要素があるかどうかを決定するために 58 :PARAMドライバ:ブラウザ 59 :PARAM方法:検索要素法(By.XPATH、By.CLASS_NAME、By.LINK_TEXT、By.ID 、By.NAME 等) 60 :PARAM elementPath:HTMLのパス要素 61は :リターン:背景スライダ及び図。 62 「」 " 63 試し: 64- time.sleepは、(1) #は、パズルの成功につながる要素を見つけることができない、あまりにも遅いページが読み込まれるのを防ぐ際にフラグ== Falseの 65 driver.find_element(方法,, elementPath) 66 フラッグ= 真 67 を除い: 68 =内のフラグ偽 69 リターンフラグに 70 71である DEFのpic_get(セルフ、ドライバ、bgImagePath、sliderImagePath): 72 "" " 73 取得する画像パズル 74 :PARAMドライバ:ブラウザ 75 :PARAM bgImagePath:背景画像 76 :PARAM liderImagePath:画像スライダー 77 :リターン:背景スライダと、図 78 " "" 79 time.sleepを(1 ) 80 buttonDrag = driver.find_element(By.XPATH、self.data.buttonDrag_xpath) 81 ActionChains(ドライバ).click_and_hold(buttonDrag).perform() 82 83 bgImage = driver.find_element(By.XPATH、self.data.bgPic_xpath) #背景画像取得要素 84 driver.save_screenshot(bgImagePath) 85 #印刷bgImage.location 86 #プリント(bgImage.size) 87 left_bg = bgImage.location [ ' X ' ] 88 top_bg = bgImage.location [ ' Y ' ] 89 right_bg = bgImage.location [ ' X ' ] + bgImage.size 【' 幅' ] 90 bottom_bg = bgImage.location [ ' Y ' ] + bgImage.size [ ' 高' ] 91 im_bg = Image.open(bgImagePath) 92 im_bg = im_bg.crop((left_bg、top_bg、right_bg、bottom_bg)) 93 im_bg.save(bgImagePath) 94 self.change_bgImage(bgImagePath) 95 96 sliderImage = driver.find_element(By.XPATH、self.data.sliderPic_xpath) #滑块图片元素获取 97 driver.save_screenshot(sliderImagePath) 98 #プリントsliderImage.location 99 #プリント(sliderImage.size) 100 left_slider = sliderImage.location [ ' X ' ] 101 top_slider = sliderImage.location [ ' Y ' ] 102 right_slider = sliderImage.location [ ' X ' ] + sliderImage.size [ ' 幅' ] 103 bottom_slider = sliderImage.location [ ' Y ' ] + sliderImage.size [ ' 高' ] 104 im_slider = Image.open(sliderImagePath) 105 im_slider = im_slider.crop((left_slider、top_slider、right_slider、bottom_slider)) 106 im_slider.save(sliderImagePath) 107 #プリント(im_bg、im_slider) 108 戻りim_slider、im_bg 109 110 DEF change_bgImage(セルフ、bgImagePath):クリック#選択は、パズルに有用で表示され、 111 "" " 112 カバー関数pic_get()背景画像スライダー突起取得 113 :PARAM bgImagePath関数pic_get()はバックグラウンドを取得します保存画像パス 114 :リターン:図背景およびスライダー 115 "" " 1 16 IMG = cv2.imread(bgImagePath) 117 IMG2 IMG = [0:150,65:120 ] 1 18 IMG [0:150,10:65] = IMG2 119 cv2.imwrite(bgImagePath、IMG) 120 121 DEF move_Distance(セルフ、bgImagePath、sliderImagePath): 122 "" " 123 画像の最良のマッチング位置を見つけます 124 :PARAM標的:バックグラウンドすなわちターゲット 125 :PARAMテンプレート:見つけるテンプレート図、すなわち必要 126 :リターン:最良一致を返し、座標対応最悪マッチング 127 「」 " 128 target_rgb = cv2.imread(bgImagePath) 129 target_gray = cv2.cvtColor(target_rgb、cv2.COLOR_BGR2GRAY) 130 template_rgb = cv2.imread(sliderImagePath、0) 131である 。#template_gray = cv2.cvtColor(template_rgb、cv2.COLOR_BGR2GRAY) 132 RES = cv2.matchTemplate(target_gray、template_rgb、CV2 .TM_CCOEFF_NORMED) 133 値= cv2.minMaxLoc(RES) 134 値2 =値[3] [0] -10 135 #プリント(値) 136 #プリント(値2) 137 戻り値2 138 139 もし __name__ == ' __main__ ' : 140 puzzleCaptcha()