ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Playwright自动化登录JD

2022-09-15 10:33:03  阅读:216  来源: 互联网

标签:box Playwright 登录 image pic cv2 JD div page


import base64
import random
import re
import time
from playwright.sync_api import sync_playwright
import cv2


def show(name):
    '''展示圈出来的位置'''
    cv2.imshow('Show', name)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

def _tran_canny(image):
    """消除噪声"""
    image = cv2.GaussianBlur(image, (3, 3), 0)
    return cv2.Canny(image, 50, 150)

def detect_displacement(img_slider_path, image_background_path):
    """detect displacement"""
    # # 参数0是灰度模式
    image = cv2.imread(img_slider_path, 0)
    template = cv2.imread(image_background_path, 0)

    # 寻找最佳匹配
    res = cv2.matchTemplate(_tran_canny(image), _tran_canny(template), cv2.TM_CCOEFF_NORMED)
    # 最小值,最大值,并得到最小值, 最大值的索引
    min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)

    top_left = max_loc[0]  # 横坐标
    return top_left * 278 / 360

def to_pic(file_name, base64_pic):
    result = re.search(
        "data:image/(?P<ext>.*?);base64,(?P<data>.*)", base64_pic, re.DOTALL
    )
    if result:
        data = result.groupdict().get("data")
    else:
        raise Exception("Do not parse!")

    img = base64.urlsafe_b64decode(data)

    filename = file_name
    with open(filename, "wb") as f:
        f.write(img)


def get_track(distance):  # distance为传入的总距离
    # 移动轨迹
    track = []
    # 当前位移
    current = 0
    # 减速阈值
    mid = distance * 4 / 5
    # 计算间隔
    t = 0.2
    # 初速度
    v = 1

    while current < distance:
        if current < mid:
            # 加速度为2
            a = 4
        else:
            # 加速度为-2
            a = -3
        v0 = v
        # 当前速度
        v = v0 + a * t
        # 移动距离
        move = v0 * t + 1 / 2 * a * t * t
        # 当前位移
        current += move
        # 加入轨迹
        track.append(round(move))
    return track


with sync_playwright() as p:
    # 启动浏览器
    browser = p.chromium.launch(headless=False)
    page = browser.new_page()

    url = "https://www.jd.com/"

    page.goto(url)

    # 点击
    page.click('xpath=//*[@id="ttbar-login"]/a[1]')
    page.click('xpath=//*[@id="content"]/div[2]/div[1]/div/div[3]/a')

    # 输入
    page.type('xpath=//*[@id="loginname"]', "188888888")
    page.type('xpath=//*[@id="nloginpwd"]', "1111")

    time.sleep(1)
    # 登录
    page.click('xpath=//*[@id="loginsubmit"]')

    time.sleep(2)

    for i in range(10):
        # 按照元素截图
        # 背景图片
        bg_pic = page.query_selector(
            'xpath=//*[@id="JDJRV-wrap-loginsubmit"]/div/div/div/div[1]/div[2]/div[1]/img'
        ).get_attribute("src")
        to_pic("bg.png", bg_pic)

        gap_pic = page.query_selector(
            'xpath=//*[@id="JDJRV-wrap-loginsubmit"]/div/div/div/div[1]/div[2]/div[2]/img'
        ).get_attribute("src")
        to_pic("gp.png", gap_pic)

        # 滑块图片
        distance = detect_displacement("gp.png", "bg.png")
        print(distance)
        
        # 移动滑块
        # 首先咱们的找到要移动的东西吧
        s = page.wait_for_selector('//*[@id="JDJRV-wrap-loginsubmit"]/div/div/div/div[2]/div[3]', strict=True)
        # 找到这个元素再当前页面的坐标(这个会返回一个字典里边四个数字)
        box = s.bounding_box()
        # 移动鼠标到上边元素的中心(上边四个参数用途来了)
        page.mouse.move(box["x"] + box["width"] / 2, box["y"] + box["height"] / 2)
        # 按下鼠标(这个不多说)
        page.mouse.down()

        page.mouse.move(box["x"] + distance + random.uniform(30, 33), box['y'], steps=30)
        page.mouse.move(box["x"] + distance + 27, box['y'], steps=30)
        
        # 移动结束鼠标抬起
        page.mouse.up()
        time.sleep(3)
    time.sleep(60)
    browser.close()

标签:box,Playwright,登录,image,pic,cv2,JD,div,page
来源: https://www.cnblogs.com/miaokela/p/16695645.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有