1. 程式人生 > >Python實現京東自動登錄

Python實現京東自動登錄

comm num nor true pic trie set png pat

配置好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)

  

Python實現京東自動登錄