亀裂を確認するスライド
「」 '
を検証するために、ポールテストスライディングひびの入った
ポールテスト検証スライディング亀裂
ブログログインガーデンのURLを:
https://account.cnblogs.com/signin?returnUrl=https%3A%2F%2Fwww.cnblogs.com%2F
コードのロジック:
1、ユーザー名とパスワードを入力し、[ログイン]をクリックし
2を、ポップアップスライドが確認し、完全な画像でニックを入れます
3、ピクセルで整列されているから、スライド変位を取得し
、人間の行動の軌跡をシミュレートするために4
5を、スライドを開始します
'「」
からセレンインポート webdriverを #ブラウザを駆動するために使用される
から selenium.webdriver インポート ActionChains #はスライドが画面にドラッグするために使用することができたときに、コードを解読
インポート時間
から PIL インポート画像 #の枕インストールPIP3
インポートランダム
#スクリーンショットの画像機能を
DEFのcut_image(ドライバー):
#はページ全体の画像を取得し、絵は'snap.png'という名前の
driver.save_screenshot(' snap.png ' )
#は、小さな描画スライドを取得
画像= driver.find_element_by_class_name(' geetest_canvas_img ' )
印刷(image.locationを)
プリント(image.size)
#は、右下、左上小画像の位置を取得する
左をimage.location = [ ' X ' ]
トップ = image.location [ ' Y ' ]
右 = image.sizeは[+左側' 幅' ]
湖底トップimage.size + = [ 「高」]
プリント(左、上、右、湖底)
#のコールフルスクリーン画像とimage_objに割り当てられたオブジェクトOpenメソッド
image_obj Image.open =(「snap.png 」)
#オブジェクトによってをimage_obj小さな画像の傍受
#のRectangleの作物でボックス:.、AS(左アッパー、右、下)タプル
IMG = image_obj.crop((左、上、右、湖底))
#小さな絵の傍受を回した後、
#のIMG .SHOW()が
返すIMG
#は完全な画像の取得
DEFの:get_image1(ドライバー)
(time.sleepを 2 )
#ブロックにピクチャー表示属性の変更を完了するには、ドキュメントツリー内のドキュメントを変更します
= js_code '' '
VAR X = document.getElementsByClassName( "geetest_canvas_fullbg")[0] = .style.display "ブロック";
' ''
#JSコード実行
driver.execute_scriptを(js_code)
#撮影した画像
イメージ= cut_image(ドライバ)
リターン画像
#は絵ニック入ります
DEF get_image2(ドライバ):
time.sleep( 2 )
#ピクチャー表示属性を完了するには、ドキュメントツリー内のドキュメントを変更するには、ブロックに変更
js_code = 「」 '
varが= X-document.getElementsByClassName( 『geetest_canvas_fullbg』) [0] .style.display = "NONE";
'' '
#実行JSコード
# driver.execute_script(js_code)
撮影した画像
の画像= cut_image(ドライバ)のリターン画像#は、スライダーの摺動距離を取得DEFの:get_distance(画像1、画像2)
#マイナースライド右の位置
スタート= 60 #画素差分
NUM = 60 印刷(画像1を。サイズ)
のために X における範囲(スタート、image1.size [0])
のための Y で [1範囲(image1.size ]) #取得画像1の各画素の完全な画像座標
RGB1 = image1.loadを()[X 、Y-] #は画像2ノッチ画像は、各画素点の座標を取得
RGB2 =
image2.load()[X、Y]
#(60、86、40)(60、86、40)RGBの
印刷(RGB1、RGB2)
#のABSは絶対値の画素値比較とり
- R&LT = ABS(RGB1 [0] RGB2 [0])
G = ABSを( [1] - [1 RGB1 RGB2の])
B = ABS(RGB1 [2] - RGB2 [2 ])
#条件が満たされた場合には、ギャップの位置を見つける
IF ません(R&LT <NUM と G <NUM と B < NUM):
#そこエラー- 7つの画素が
返す X --7 #1 マネキンスライディングトラックDEFのget_strck_move(距離):
距離 + = 20である『』 '
スライドトラック作用する
式を加速します。
V = V0 + * tの
式から:
S = 0.5×V0 * T + A *(T ** 2)
'' '
#初期速度
V0 = 0
#の時間
T = 0.2 #1 位置
S = 0 #1 スライドフォワードリスト、トラックリストスライディング
move_list = [] #位置の加減速のように、中間値を
mIDを=距離/ 3. 5 * #の減速度がリスト
v_list = [1,2 ,. 3 ,. 4 ] #1 のサイクリックシフトしながら S < 距離:
IF S < MID:
#ランダム加速度取得
A = v_list [random.randint(0、LEN(v_list) - 1 )]
他:
#ランダム減速得る
A = -v_list [random.randint(0、LEN(v_list) - 1 )]
'' '
一様加速\減速
V = V0 + *トンの
変位:
S = 0.5 * V * T + A *(T ** 2)
'' '
#は初期速度取得
V = V0の
#式からを:
S1 = + 0.5 * V * T * A(T ** 2 )
S1 = ROUND(S1) #丸め
#の加速式:
#V = V0 + A * Tの
m_v = V + A * T
#初期速度に割り当てられ、この加速度/減速度、次のように計算
V0は= m_v
#スライドリストに変位を加えます
move_list.append(S1)
#は、摺動初期距離変更
S + = S1の
#は負でなければならない、カスタム後方スライドトラックリストを後退
back_list = [-1、-1、-2 、-3、-2、-1、 -1、-2、-3、-2、-1、-1 ]
リターン { ' move_list ':move_list、' back_list ' :back_list}
DEF メイン():
ドライバ = webdriver.Chrome(R&LT ' D:\ BaiduNetdiskDownload \ chromedriver_win32 \ chromedriver.exe ' )
driver.implicitly_wait( 10 )
トライ:
driver.get('https://account.cnblogs.com/signin?returnUrl=https%3A%2F%2Fwww.cnblogs.com%2F ' )
#1、ユーザー名とパスワードを入力し、ログインをクリックし
USER_INPUT = driver.find_element_by_id(' LoginNameに" )
user_input.send_keys(' _tank_ ' )
time.sleep( 0.2 )
pwd_input = driver.find_element_by_id(' パスワード' )
pwd_input.send_keys(' k46709394。' )
time.sleep( 2 )
login_submit = driver.find_element_by_id('submitBtn ' )
login_submit.click()
#完全なイメージ2、
イメージ1 = get_image1(ドライバ)
#3、切り出し画像取得
画像2 = get_image2(ドライバ)
#4、二つの絵は、距離スライディング得、一致
距離= (get_distanceを画像1、画像2)
印刷(距離)
#5、トラックをスライド人間のシミュレーション
move_dict = get_strck_move(距離)
#取得進行はトラックをスライド
move_list move_dict = [ ' move_list ' ]
#は、トラックをスライド取り戻す
= move_dict back_list [ ' back_list ']
#6、スライドし始めた
move_tag = driver.find_element_by_class_name(' geetest_slider_buttonを' )
#のスライド上をクリックして、ボタンを押す
ActionChains(ドライバー).click_and_hold(move_tag).perform()
#が前方にスライド
するために移動中:move_list
ActionChains(ドライバー).move_by_offset (XOFFSET =移動、YOFFSET = 0).perform()
time.sleep( 0.1 )
time.sleep( 0.1 )
#が後方にスライド
するための先頭にback_list:
ActionChains(ドライバ).move_by_offset(XOFFSET=バック、YOFFSET = 0).perform()
time.sleep( 0.1 )
#制作微妙晃动
ActionChains(ドライバ).move_by_offset(XOFFSET = 3、YOFFSET = 0).perform()
ActionChains(ドライバ).move_by_offset(XOFFSET = - 3、YOFFSET = 0).perform()
time.sleep( 0.1 )
#释放滑动按钮
ActionChains(ドライバ).release()()を実行する。
time.sleep( 100 )
、最終的に:
driver.close()
もし __name__ == ' __main__ " :
main()の