配置好webdriver,用的是Chrome的
import cv2 import time import numpy as np from selenium import webdriver from urllib import request from selenium.webdriver.common.action_chains import ActionChains brower = webdriver.Chrome() def loadpage(userid, password): url = "https://passport.jd.com/new/login.aspx?" brower.get(url) time.sleep(3) s1 = r'//div/div[@class="login-tab login-tab-r"]/a' userlogin = brower.find_element_by_xpath(s1) userlogin.click() # time.sleep(5) username = brower.find_element_by_id("loginname") username.send_keys(userid) userpswd = brower.find_element_by_id("nloginpwd") userpswd.send_keys(password) # time.sleep(5) brower.find_element_by_id("loginsubmit").click() time.sleep(3) while True: try: getPic() except: print("登陸成功----") break time.sleep(5) def getPic(): # 用於找到登錄圖片的大圖 s2 = r'//div/div[@class="JDJRV-bigimg"]/img' # 用來找到登錄圖片的小滑塊 s3 = r'//div/div[@class="JDJRV-smallimg"]/img' bigimg = brower.find_element_by_xpath(s2).get_attribute("src") smallimg = brower.find_element_by_xpath(s3).get_attribute("src") # print(smallimg + '\n') # print(bigimg) # 背景大圖命名 backimg = "backimg.png" # 滑塊命名 slideimg = "slideimg.png" # 下載背景大圖保存到本地 request.urlretrieve(bigimg, backimg) # 下載滑塊保存到本地 request.urlretrieve(smallimg, slideimg) # 獲取圖片並灰度化 block = cv2.imread(slideimg, 0) template = cv2.imread(backimg, 0) # 二值化后的圖片名稱 blockName = "block.jpg" templateName = "template.jpg" # 將二值化后的圖片進行保存 cv2.imwrite(blockName, block) cv2.imwrite(templateName, template) block = cv2.imread(blockName) block = cv2.cvtColor(block, cv2.COLOR_RGB2GRAY) block = abs(255 - block) cv2.imwrite(blockName, block) block = cv2.imread(blockName) template = cv2.imread(templateName) # 獲取偏移量 result = cv2.matchTemplate(block, template, cv2.TM_CCOEFF_NORMED) # 查找block在template中的位置,返回result是一個矩陣,是每個點的匹配結果 x, y = np.unravel_index(result.argmax(), result.shape) # print("x方向的偏移", int(y * 0.4 + 18), 'x:', x, 'y:', y) # 獲取滑塊 element = brower.find_element_by_xpath(s3) ActionChains(brower).click_and_hold(on_element=element).perform() ActionChains(brower).move_to_element_with_offset(to_element=element, xoffset=y, yoffset=0).perform() ActionChains(brower).release(on_element=element).perform() time.sleep(3) if __name__ == '__main__': id = "*********" # 用戶賬號 passwd = "******" # 用戶密碼 loadpage(id, passwd)