首页 > 编程语言 >python selenium 利用pyautogui+ActionChains 完美解决我的滑块验证登录问题

python selenium 利用pyautogui+ActionChains 完美解决我的滑块验证登录问题

时间:2023-10-24 18:32:09浏览次数:36  
标签:pyautogui 滑块 img python driver cv2 sleep time div

在解决滑块验证的时候不知道什么原因明明是滑块已经对上了,代码执行就是会校验不通过,手动时就可以,中间也做利用ActionChains模块减速滑动轨迹的操作,但仍然不行,后面在执行代码中添加了pyautogui模块使鼠标悬停在屏幕中的某个点而不改变ActionChains鼠标的定位后终于每次都能通过了

from selenium import webdriver
import pyautogui
import requests
import time
import cv2
import numpy as np
from selenium.webdriver import ActionChains


driver = webdriver.Chrome(executable_path='/usr/local/bin/chromedriver')
driver.get('https://dun.163.com/trial/jigsaw')
time.sleep(5)

# 点击进入滑块界面
driver.find_element_by_xpath('//li[text()="弹出式"]').click()
time.sleep(1)
# 点击完成验证
driver.find_element_by_css_selector('button.tcapt-bind_btn.tcapt-bind_btn--login.j-pop').click()
time.sleep(3)

while True:
    # 获取两张图片
    url_s = driver.find_element_by_class_name('yidun_jigsaw').get_attribute('src')
    url_b = driver.find_element_by_class_name('yidun_bg-img').get_attribute('src')
    headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.41 Safari/537.36'
    }
    res_s = requests.get(url_s, headers=headers)
    data_s = res_s.content
    res_b = requests.get(url_b, headers=headers)
    data_b = res_b.content
    # 保存图片
    with open('pic_s.png', 'wb')as f:
        f.write(data_s)
    with open('pic_b.png', 'wb')as f:
        f.write(data_b)

    # 使用opencv读取两张图片
    simg = cv2.imread('pic_s.png')
    bimg = cv2.imread('pic_b.png')

    # 灰度处理,降低偏差
    s_img = cv2.cvtColor(simg, cv2.COLOR_BGR2GRAY)
    b_img = cv2.cvtColor(bimg, cv2.COLOR_BGR2GRAY)

    # 保存两张灰度处理的图片
    cv2.imwrite('hui_simg.png', s_img)
    cv2.imwrite('hui_bimg.png', b_img)

    # 处理滑块图片,保存有效部分
    s_img = s_img[s_img.any(1)]

    # opencv的匹配算法,匹配模块寻找两张图片的相似之处
    result = cv2.matchTemplate(b_img, s_img, cv2.TM_CCOEFF_NORMED)
    print('result', result)

    # 获取坐标
    # 获取最大索引
    index_max = np.argmax(result)
    # 获取到坐标
    y, x = np.unravel_index(index_max, result.shape)
    print("y:", y, "x:", x)
    time.sleep(2)
    # 定位到滑块
    ele = driver.find_element_by_xpath(
        '/html/body/main/div[1]/div/div[2]/div[2]/div[1]/div[3]/div/div/div[3]/div[2]/div/div/div[2]/div/div[2]/div[2]')

    # 实例化对象
    action = ActionChains(driver)
    # 拖动滑块
    time.sleep(1)
    action.click_and_hold(ele).perform()
    time.sleep(0.5)
    pyautogui.moveTo(pyautogui.size()[0] / 2, pyautogui.size()[1] / 2)  # 鼠标晃到屏幕中间的位置,不影响后面鼠标的起始位置
    action.move_by_offset(xoffset=x / 480 * 320 + 10, yoffset=0).perform()  # 480是图片保存在本地的宽度,320是网页打开图片显示的宽度
    time.sleep(1)
    action.release().perform()
    # 定位到验证成功
    time.sleep(1)
    try:
        driver.find_element_by_xpath('/html/body/main/div[1]/div/div[2]/div[2]/div[1]/div[3]/div/div/div[3]/div[2]/div/div/div[2]/div/div[2]/div[2]')
    except:
        break


标签:pyautogui,滑块,img,python,driver,cv2,sleep,time,div
From: https://blog.51cto.com/u_16321127/8009158

相关文章

  • 21.4 Python 使用GeoIP2地图定位
    GeoIP2是一种IP地址定位库,它允许开发人员根据IP地址查找有关位置和地理位置的信息。它使用MaxMind公司的IP地址数据库,并提供一个方便的PythonAPI。GeoIP2可以用于许多不同的应用程序,例如网站分析、广告定位和身份验证。GeoIP2提供了许多不同的信息,例如国家、城市、邮政编码、经纬......
  • Python数据类型
     数据类型有数值型,布尔型和字符串型一、数值型包括int(整型)、float(浮点型)和complex(复数型)等。1.整型Python3.x支持任意大小的整型数。整型数可以表示成十进制、八进制、十六进制和二进制形式。十进制整型常量:数码为0~9,如-135、57232。八进制整型常量:必须以80或8o开头(第1......
  • python引用相对路径
    文件夹ants/bees文件夹与learn_data.py隶属于同一个目录data_process   所以引用相对路径的方式即为:classMyData(Dataset):def__init__(self,root_dir,label_dir):self.root_dir=root_dir#根目录,即hymenoptera_data/trainself.label_......
  • python当前工作目录和当前文件的绝对路径
    当前文件的绝对路径:这个就是文件在硬盘上的真实路径,从盘符一直到文件所在的具体位置。当前工作目录(currentworkingdirectory)是文件系统当前所在的目录,如果命令没有额外指定路径,则默认为当前工作目录。    importos#当前文件的绝对路径print(os.path.abspath(......
  • python 网络编程
    python编程目录python编程一.网络编程socket1.1基于tcp实现网络通讯1.2基于tcp实现远程执行命令1)粘包问题2)自定义协议解决粘包问题3)最终版定义字典解决粘包问题1.3socketserver实现并发1)基于TCP实现2)基于UDP实现一.网络编程socket1.1基于tcp实现网络通讯服务......
  • 关于Python正则式中的r和字符串中的r
     正则表达式也是字符串,但是不是普通的字符串,其中包含了正则转义和字符串转义。正则表达式前边加r是取消了字符串转义,但是正则转义还在。例1和例2的对比中,例2的正则表达式取消了普通字符串转义,但是\n在正则表达式里是匹配换行符。例2和例3的对比中,例3的被匹配对象实际是两个字......
  • python 解析User-Agent
    需求:从User-Agent中获取浏览器信息和操作系统信息使用第三方库ua-parser安装pipinstallua-parser使用fromua_parser.user_agent_parserimportParse#解析user_agentparsed_user_agent=Parse(user_agent)print(parsed_user_agent)返回数据{"string":"Mozill......
  • Python打包为可执行exe
    为什么要打包exe有的时候只需要让别人运行某种功能,传输文件以及代码是需要别人配置好一定的环境才可以操作,而打包成exe文件就可以直接运行文件。pyinstaller打包python中常用的打包方式首先进行pyinstaller的安装,打开cmd输入pipinstallpyinstaller-ihttp://pypi.douban.c......
  • 【ChatGPT系列】Python自定义打印各种颜色的日志
    如何在控制台和文件中同时输出日志?要将日志同时输出到文件和控制台,可以创建并配置一个额外的StreamHandler,然后将其添加到Logger中。下面是一个示例代码,演示如何将日志同时输出到文件和控制台:importlogging#创建Logger对象logger=logging.getLogger("example_logger")......
  • 洛谷P5706 【深基2.例8】再分肥宅水(Python3)
    关键点:1.同一行输入两个数input().split(),然后list一下存到变量里,这个不多说2。输出两个数Python中默认end=‘\n’,所以不用多写一遍换行。3.输出三位小数这里用到了Python的格式化输出,与c++的格式化输出非常相近,只是符号不同。具体可看这篇blog 代码如下:a=list(input(......