当前位置: 首页 > news >正文

python通过selenium实现自动登录及轻松过滑块验证、点选验证码(2024-06-14)

一、chromedriver配置环境搭建


请确保下载的驱动程序与你的Chrome浏览器版本匹配,以确保正常运行。

1、Chrome版本号


chrome的地址栏输入chrome://version,自然就得到125.0.6422.142
版本 125.0.6422.142(正式版本) (64 位)


(图1Chrome版本号)

2、最新chromedriver版本下载地址

https://googlechromelabs.github.io/chrome-for-testing/


(图2最新chromedriver版本下载地址)

3、查看chromedriver 版本号

chromedriver --version



(图3查看chromedriver 版本号)

4、chromedriver.exe放置位置


与python.exe同目录


(图4chromedriver.exe放置位置)

5、安装selenium


pip install selenium(出现下图是已经成功安装4.10.0版本了)

6、查看selenium版本号


pip show selenium就可以查看版本号了(Version=4.10.0)


(图5查看selenium版本号)

7、卸载selenium


pip uninstall selenium

8、指定selenium安装版本


输入pip install selenium==3.3.1(指定安装3.3.1版本)

二、selenium自动登录


Selenium添加Cookie来实现自动登录。
总的来说分两步


1、第一步获取你登录的cookie,以csdn为例


driver = webdriver.Chrome()
driver.get('https://www.csdn.net/')
start=time()
sleep(15)//这里设置的是等待多少秒,也就是浏览器等待你登录,在这之后就去检查cookie,。
try:
    driver.refresh()//先刷新界面
    print(driver.get_cookies())//获得cookie并打印
except Exception as e:
    print(e)
    print(f'耗时:{time()-start}')
然后在控制台你就可以得到一个字典格式的cookies

2、第二步就是把第一步中得到的cookie放到webdriver里

driver = webdriver.Chrome()
driver.get('https://www.csdn.net/')
driver.delete_all_cookies()//先清除原有的
cookies=//这里把第一步的cookie复制上就行
for cookie in cookies:
    driver.add_cookie(cookie)
driver.refresh()//带着cookie重新加载

3、 webdriver中常用的cookie方法


webdriver中提供了操作cookie的相关方法:

get_cookies()                   获得cookie信息

add_cookie(cookie_dict)        添加cookie

delete_cookie(name)             删除特定(部分)的cookie

delete_all_cookies()              删除所有的cookie

4、自动登录完整源码

url="https://mygiftcard.jd.com/giftcard/myGiftCardInit.action"
def login(driver):driver.get('https://www.jd.com/')driver.switch_to.window(driver.window_handles[-1])driver.maximize_window()driver.delete_all_cookies()cookies = [{'domain': '.jd.com', 'expiry': 1717384813, 'httpOnly': False, 'name': '__jdb', 'path': '/', 'sameSite': 'Lax','secure': False, 'value': '76161171.5.1717382950957103922947|1.1717382951'},{'domain': '.jd.com', 'expiry': 1732935013, 'httpOnly': False, 'name': '__jda', 'path': '/', 'sameSite': 'Lax','secure': False, 'value': '76161171.1717382950957103922947.1717382951.1717382951.1717382951.1'},{'domain': '.jd.com', 'httpOnly': False, 'name': '__jdc', 'path': '/', 'sameSite': 'Lax', 'secure': False,'value': '76161171'},{'domain': '.jd.com', 'expiry': 1748918985, 'httpOnly': False, 'name': 'pinId', 'path': '/', 'sameSite': 'None','secure': True, 'value': 'YCe8rw2G6w2zBk65PfDfDg'},{'domain': '.jd.com', 'expiry': 1719974985, 'httpOnly': False, 'name': 'pin', 'path': '/', 'sameSite': 'None','secure': True, 'value': 'jd_XLCuliLsIoml'},{'domain': '.jd.com', 'expiry': 1717386601, 'httpOnly': False, 'name': 'jsavif', 'path': '/', 'sameSite': 'Lax','secure': False, 'value': '1'},{'domain': '.jd.com', 'expiry': 1717384801, 'httpOnly': False, 'name': 'token', 'path': '/', 'sameSite': 'Lax','secure': False, 'value': '58b2853fe33d43b6606c5a21df75d6e5,3,954101'},{'domain': '.jd.com', 'expiry': 1719975003, 'httpOnly': False, 'name': 'ipLoc-djd', 'path': '/','sameSite': 'Lax', 'secure': False, 'value': '25-2258-2261-6568'},{'domain': 'www.jd.com', 'expiry': 1717386590, 'httpOnly': False, 'name': 'UseCorpPin', 'path': '/','sameSite': 'Lax', 'secure': False, 'value': 'jd_XLCuliLsIoml'},{'domain': '.jd.com', 'expiry': 1719974985, 'httpOnly': False, 'name': '_tp', 'path': '/', 'sameSite': 'None','secure': True, 'value': 'gcPCiSoOxTEQh1UmLWSJmA%3D%3D'},{'domain': '.jd.com', 'expiry': 1718246952, 'httpOnly': False, 'name': 'areaId', 'path': '/', 'sameSite': 'Lax','secure': False, 'value': '25'},{'domain': '.jd.com', 'expiry': 1719974985, 'httpOnly': False, 'name': 'unick', 'path': '/', 'sameSite': 'None','secure': True, 'value': '717tjgq12eb3u3'},{'domain': '.jd.com', 'expiry': 1717383072, 'httpOnly': False, 'name': '_gia_d', 'path': '/', 'sameSite': 'Lax','secure': False, 'value': '1'},{'domain': '.jd.com', 'expiry': 1751942985, 'httpOnly': False, 'name': 'TrackID', 'path': '/','sameSite': 'None', 'secure': True,'value': '16Qvq9anbTkSX8gr4zaukUq5uQYslojZC9OQmewQghRGZ3XvjG_MMnzr_vyEIKSdUCtJ2wRpSFTY3eQtR-mtgEtTLaduuEqMy1V9rbOxT2sDX0aNazsKZ9ymfF8kbb66r'},{'domain': '.jd.com', 'expiry': 1751943003, 'httpOnly': False, 'name': 'shshshfpb', 'path': '/','sameSite': 'Lax', 'secure': False, 'value': 'BApXcwpUJ3-pAgpgn7ERHMlecUhcGxJTHBlV5Lnto9xJ1MukUQIC2'},{'domain': '.jd.com', 'expiry': 1751943002, 'httpOnly': False, 'name': 'shshshfpa', 'path': '/','sameSite': 'Lax', 'secure': False, 'value': '52743637-1e03-a986-e555-3b60bd02251d-1717382954'},{'domain': '.jd.com', 'expiry': 1751942954, 'httpOnly': False, 'name': 'shshshfpx', 'path': '/','sameSite': 'Lax', 'secure': False, 'value': '52743637-1e03-a986-e555-3b60bd02251d-1717382954'},{'domain': 'www.jd.com', 'expiry': 1748918953, 'httpOnly': False, 'name': 'o2State', 'path': '/','sameSite': 'Lax', 'secure': False,'value': '{%22webp%22:true%2C%22avif%22:true%2C%22lastvisit%22:1717382953020}'},{'domain': '.jd.com', 'expiry': 1718678985, 'httpOnly': True, 'name': 'thor', 'path': '/', 'sameSite': 'None','secure': True,'value': 'B4C20964EEB81D93A1282B10D740DDCE93E6BF376C1A027834CA7420581040CA1F1691CE77DF8E8D4839BB18578D59CADD7B65F3464D14E69D56C466193409E2C5CC1CCC0FB0077D600F5E5A9050977080A6CD9DB54BF53D86A4A33D85C531B9CBA745CE208771BE1D5DFCEBADFD8E0CEB8C892454D65E7595BB979BE56296A5F7B62DAF0FD0D84D7FE1241F16E5B46A7A60AB7C12103EA76433421EA1F54E0A'},{'domain': '.jd.com', 'expiry': 1743302958, 'httpOnly': False, 'name': '3AB9D23F7A4B3C9B', 'path': '/','sameSite': 'Lax', 'secure': False,'value': 'IGRRJT2FGAUX2L3XBSLXZRHOWGH7YNRHMBQHXA7OMUM75D6BQNTIV6YWQQLNKHV2URUHMEDS7BVALS47ABD56MW5TA'},{'domain': '.jd.com', 'expiry': 1718679002, 'httpOnly': True, 'name': 'flash', 'path': '/', 'sameSite': 'None','secure': True,'value': '2_zpZqs4H7M7_a9OhxVV4eMXgMPNf1o8Lxl-gS2Cneh79n2xY8IA6o9y5JglFeAKaQiZht9zwAUXVJco4lj9A4vcdvIQiBDvy8LbsO_AFm1vttvRjlsuRLrbjHGIQSlouU9NJknNKUB8TbCWUlqFfY8wD2CdBj94DPObXyoggI_DK*'},{'domain': '.jd.com', 'expiry': 1719974985, 'httpOnly': True, 'name': '_pst', 'path': '/', 'sameSite': 'None','secure': True, 'value': 'jd_XLCuliLsIoml'},{'domain': '.jd.com', 'expiry': 1717384801, 'httpOnly': False, 'name': '__tk', 'path': '/', 'sameSite': 'Lax','secure': False, 'value': 'VnTIiUTISDSEikqDVAvHVAvJTLe5Wne3iLTHiUSFikuATcVIVkq3i2,3,954101'},{'domain': '.jd.com', 'expiry': 1748486952, 'httpOnly': False, 'name': '3AB9D23F7A4B3CSS', 'path': '/','sameSite': 'Lax', 'secure': False,'value': 'jdd03IGRRJT2FGAUX2L3XBSLXZRHOWGH7YNRHMBQHXA7OMUM75D6BQNTIV6YWQQLNKHV2URUHMEDS7BVALS47ABD56MW5TAAAAAMP3QADWNQAAAAACGG4IYVAGJI3JMX'},{'domain': '.jd.com', 'expiry': 1732935018, 'httpOnly': False, 'name': '__jdu', 'path': '/', 'sameSite': 'Lax','secure': False, 'value': '1717382950957103922947'},{'domain': '.jd.com', 'httpOnly': False, 'name': 'ceshi3.com', 'path': '/', 'sameSite': 'None', 'secure': True,'value': '000'},{'domain': '.jd.com', 'expiry': 1718678950, 'httpOnly': False, 'name': '__jdv', 'path': '/', 'sameSite': 'Lax','secure': False, 'value': '76161171|direct|-|none|-|1717382950958'}]for cookie in cookies:driver.add_cookie(cookie)##driver.refresh()driver.get(url)

三、selenium自动填写表单


分为两步:一是取得元素(文本框、按钮等),二是执行输入、点击等操作。


1、第一步、获取元素


在 Chrome 里,鼠标停留在文本框,使用“检查元素”功能,在下方的调试窗口,右键“复制->复制完整 XPath”(如下图),得到“文本框”对应的 XPath,使用 Selenium 提供的send_keys命令实现文本输入。


(图6Crome里取得元素 XPath)


2、第二步、执行输入、点击等操作


执行输入

driver.find_element(By.XPATH,'/html/body/div[4]/div/div/div[2]/div/div[1]/div/div/div/div/div[2]/div[2]/div[2]/input').send_keys(card_id)


执行点击

driver.find_element(By.XPATH,'/html/body/div[4]/div/div/div[2]/div/div[1]/div/div/div/div/div[2]/div[2]/div[3]/div').click()


3、获取元素属性

        ele_big = driver.find_element(By.ID, "cpc_img")ele_small = driver.find_element(By.ID, "small_img")src_big = ele_big.get_attribute('src')src_small = ele_small.get_attribute('src')

四、pyautogui自动化控制鼠标和键盘操作


PyAutoGUI是一个纯Python的GUI自动化工具,其目的是可以用程序自动控制鼠标和键盘操作,多平台支持(Windows,OS X,Linux)。


1、安装

pip3 install pyautogui

2、pyautogui鼠标操作样例

import pyautogui# 获取当前屏幕分辨率
screenWidth, screenHeight = pyautogui.size()# 获取当前鼠标位置
currentMouseX, currentMouseY = pyautogui.position()# 2秒钟鼠标移动坐标为100,100位置  绝对移动
#pyautogui.moveTo(100, 100,2)
pyautogui.moveTo(x=100, y=100,duration=2, tween=pyautogui.linear)#鼠标移到屏幕中央。
pyautogui.moveTo(screenWidth / 2, screenHeight / 2)# 鼠标左击一次
#pyautogui.click()
# x 
# y 
# clicks 点击次数
# interval点击之间的间隔
# button 'left', 'middle', 'right' 对应鼠标 左 中 右或者取值(1, 2, or 3)
# tween 渐变函数
#
pyautogui.click(x=None, y=None, clicks=1, interval=0.0, button='left', duration=0.0, tween=pyautogui.linear)# 鼠标相对移动 ,向下移动
#pyautogui.moveRel(None, 10)
pyautogui.moveRel(xOffset=None, yOffset=10,duration=0.0, tween=pyautogui.linear)# 鼠标当前位置0间隔双击
#pyautogui.doubleClick()
pyautogui.doubleClick(x=None, y=None, interval=0.0, button='left', duration=0.0, tween=pyautogui.linear)# 鼠标当前位置3击
#pyautogui.tripleClick()
pyautogui.tripleClick(x=None, y=None, interval=0.0, button='left', duration=0.0, tween=pyautogui.linear)#右击
pyautogui.rightClick()#中击
pyautogui.middleClick()#  用缓动/渐变函数让鼠标2秒后移动到(500,500)位置
#  use tweening/easing function to move mouse over 2 seconds.
pyautogui.moveTo(x=500, y=500, duration=2, tween=pyautogui.easeInOutQuad)#鼠标拖拽
pyautogui.dragTo(x=427, y=535, duration=3,button='left')#鼠标相对拖拽
pyautogui.dragRel(xOffset=100,yOffset=100,duration=,button='left',mouseDownUp=False)#鼠标移动到x=1796, y=778位置按下
pyautogui.mouseDown(x=1796, y=778, button='left')#鼠标移动到x=2745, y=778位置松开(与mouseDown组合使用选中)
pyautogui.mouseUp(x=2745, y=778, button='left',duration=5)#鼠标当前位置滚轮滚动
pyautogui.scroll()
#鼠标水平滚动(Linux)
pyautogui.hscroll()
#鼠标左右滚动(Linux)
pyautogui.vscroll()

移动滑块函数

def my_slide(pos,distance):start_x = pos[0]start_y = pos[1]end_x = pos[0] + distanceend_y = pos[1]# 移动鼠标到起始位置pyautogui.moveTo(start_x, start_y, duration=0.3)# 按下鼠标左键pyautogui.mouseDown()# 往右多拖到20xppyautogui.moveTo(end_x - 20, end_y - 20, duration=0.4)#拖回结束位置pyautogui.moveTo(end_x, end_y, duration=0.5)# 松开鼠标左键pyautogui.mouseUp()

3、pyautogui键盘操作样例

#模拟输入信息
pyautogui.typewrite(message='Hello world!',interval=0.5)
#点击ESC
pyautogui.press('esc')
# 按住shift键
pyautogui.keyDown('shift')
# 放开shift键
pyautogui.keyUp('shift')
# 模拟组合热键
pyautogui.hotkey('ctrl', 'c')

五、python屏幕截图

我们需要用到Python的pillow模块中的ImageGrab类的grab()方法即可实现,具体代码如下:

img = ImageGrab.grab(bbox=(x, y, width, height))img = ImageGrab.grab(bbox=(759, 421, 1141, 793))
img.save('./sel.jpg')


该方法中bbox参数中传入需要截取图片的区域即可。其中x、y表示截取图片的左上角位置坐标,width、height参数中传入截取图片的宽度和高度。

如果是全屏幕截取,则x, y = 0, 0;width、height传入屏幕分辨率中的宽度和高度即可。


六、python通过selenium自动登录及轻松过滑块验证、点选验证码源代码

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
import pyautogui
import time
import webbrowser, base64, iofrom PIL import Image
import random
import cv2
import pyautogui
import time
import webbrowser
import requests, json, re
import time
import random
import shutil
import pyperclip
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
import keyboard, os , uuid
from PIL import ImageGrabfrom YdmVerify import YdmVerify
y = YdmVerify()
##author:byc6352
##technical support:byc6352 or metabycf or 39848872
card_id='55ADCB28DBC56EB4'
url="https://mygiftcard.jd.com/giftcard/myGiftCardInit.action"
def login(driver,cookies=''):##自动登录driver.get('https://www.jd.com/')driver.switch_to.window(driver.window_handles[-1])driver.maximize_window()driver.delete_all_cookies()if cookies=='':cookies = [{'domain': '.jd.com', 'expiry': 1717384813, 'httpOnly': False, 'name': '__jdb', 'path': '/', 'sameSite': 'Lax','secure': False, 'value': '76161171.5.1717382950957103922947|1.1717382951'},{'domain': '.jd.com', 'expiry': 1732935013, 'httpOnly': False, 'name': '__jda', 'path': '/', 'sameSite': 'Lax','secure': False, 'value': '76161171.1717382950957103922947.1717382951.1717382951.1717382951.1'},{'domain': '.jd.com', 'httpOnly': False, 'name': '__jdc', 'path': '/', 'sameSite': 'Lax', 'secure': False,'value': '76161171'},{'domain': '.jd.com', 'expiry': 1748918985, 'httpOnly': False, 'name': 'pinId', 'path': '/', 'sameSite': 'None','secure': True, 'value': 'YCe8rw2G6w2zBk65PfDfDg'},{'domain': '.jd.com', 'expiry': 1719974985, 'httpOnly': False, 'name': 'pin', 'path': '/', 'sameSite': 'None','secure': True, 'value': 'jd_XLCuliLsIoml'},{'domain': '.jd.com', 'expiry': 1717386601, 'httpOnly': False, 'name': 'jsavif', 'path': '/', 'sameSite': 'Lax','secure': False, 'value': '1'},{'domain': '.jd.com', 'expiry': 1717384801, 'httpOnly': False, 'name': 'token', 'path': '/', 'sameSite': 'Lax','secure': False, 'value': '58b2853fe33d43b6606c5a21df75d6e5,3,954101'},{'domain': '.jd.com', 'expiry': 1719975003, 'httpOnly': False, 'name': 'ipLoc-djd', 'path': '/','sameSite': 'Lax', 'secure': False, 'value': '25-2258-2261-6568'},{'domain': 'www.jd.com', 'expiry': 1717386590, 'httpOnly': False, 'name': 'UseCorpPin', 'path': '/','sameSite': 'Lax', 'secure': False, 'value': 'jd_XLCuliLsIoml'},{'domain': '.jd.com', 'expiry': 1719974985, 'httpOnly': False, 'name': '_tp', 'path': '/', 'sameSite': 'None','secure': True, 'value': 'gcPCiSoOxTEQh1UmLWSJmA%3D%3D'},{'domain': '.jd.com', 'expiry': 1718246952, 'httpOnly': False, 'name': 'areaId', 'path': '/', 'sameSite': 'Lax','secure': False, 'value': '25'},{'domain': '.jd.com', 'expiry': 1719974985, 'httpOnly': False, 'name': 'unick', 'path': '/', 'sameSite': 'None','secure': True, 'value': '717tjgq12eb3u3'},{'domain': '.jd.com', 'expiry': 1717383072, 'httpOnly': False, 'name': '_gia_d', 'path': '/', 'sameSite': 'Lax','secure': False, 'value': '1'},{'domain': '.jd.com', 'expiry': 1751942985, 'httpOnly': False, 'name': 'TrackID', 'path': '/','sameSite': 'None', 'secure': True,'value': '16Qvq9anbTkSX8gr4zaukUq5uQYslojZC9OQmewQghRGZ3XvjG_MMnzr_vyEIKSdUCtJ2wRpSFTY3eQtR-mtgEtTLaduuEqMy1V9rbOxT2sDX0aNazsKZ9ymfF8kbb66r'},{'domain': '.jd.com', 'expiry': 1751943003, 'httpOnly': False, 'name': 'shshshfpb', 'path': '/','sameSite': 'Lax', 'secure': False, 'value': 'BApXcwpUJ3-pAgpgn7ERHMlecUhcGxJTHBlV5Lnto9xJ1MukUQIC2'},{'domain': '.jd.com', 'expiry': 1751943002, 'httpOnly': False, 'name': 'shshshfpa', 'path': '/','sameSite': 'Lax', 'secure': False, 'value': '52743637-1e03-a986-e555-3b60bd02251d-1717382954'},{'domain': '.jd.com', 'expiry': 1751942954, 'httpOnly': False, 'name': 'shshshfpx', 'path': '/','sameSite': 'Lax', 'secure': False, 'value': '52743637-1e03-a986-e555-3b60bd02251d-1717382954'},{'domain': 'www.jd.com', 'expiry': 1748918953, 'httpOnly': False, 'name': 'o2State', 'path': '/','sameSite': 'Lax', 'secure': False,'value': '{%22webp%22:true%2C%22avif%22:true%2C%22lastvisit%22:1717382953020}'},{'domain': '.jd.com', 'expiry': 1718678985, 'httpOnly': True, 'name': 'thor', 'path': '/', 'sameSite': 'None','secure': True,'value': 'B4C20964EEB81D93A1282B10D740DDCE93E6BF376C1A027834CA7420581040CA1F1691CE77DF8E8D4839BB18578D59CADD7B65F3464D14E69D56C466193409E2C5CC1CCC0FB0077D600F5E5A9050977080A6CD9DB54BF53D86A4A33D85C531B9CBA745CE208771BE1D5DFCEBADFD8E0CEB8C892454D65E7595BB979BE56296A5F7B62DAF0FD0D84D7FE1241F16E5B46A7A60AB7C12103EA76433421EA1F54E0A'},{'domain': '.jd.com', 'expiry': 1743302958, 'httpOnly': False, 'name': '3AB9D23F7A4B3C9B', 'path': '/','sameSite': 'Lax', 'secure': False,'value': 'IGRRJT2FGAUX2L3XBSLXZRHOWGH7YNRHMBQHXA7OMUM75D6BQNTIV6YWQQLNKHV2URUHMEDS7BVALS47ABD56MW5TA'},{'domain': '.jd.com', 'expiry': 1718679002, 'httpOnly': True, 'name': 'flash', 'path': '/', 'sameSite': 'None','secure': True,'value': '2_zpZqs4H7M7_a9OhxVV4eMXgMPNf1o8Lxl-gS2Cneh79n2xY8IA6o9y5JglFeAKaQiZht9zwAUXVJco4lj9A4vcdvIQiBDvy8LbsO_AFm1vttvRjlsuRLrbjHGIQSlouU9NJknNKUB8TbCWUlqFfY8wD2CdBj94DPObXyoggI_DK*'},{'domain': '.jd.com', 'expiry': 1719974985, 'httpOnly': True, 'name': '_pst', 'path': '/', 'sameSite': 'None','secure': True, 'value': 'jd_XLCuliLsIoml'},{'domain': '.jd.com', 'expiry': 1717384801, 'httpOnly': False, 'name': '__tk', 'path': '/', 'sameSite': 'Lax','secure': False, 'value': 'VnTIiUTISDSEikqDVAvHVAvJTLe5Wne3iLTHiUSFikuATcVIVkq3i2,3,954101'},{'domain': '.jd.com', 'expiry': 1748486952, 'httpOnly': False, 'name': '3AB9D23F7A4B3CSS', 'path': '/','sameSite': 'Lax', 'secure': False,'value': 'jdd03IGRRJT2FGAUX2L3XBSLXZRHOWGH7YNRHMBQHXA7OMUM75D6BQNTIV6YWQQLNKHV2URUHMEDS7BVALS47ABD56MW5TAAAAAMP3QADWNQAAAAACGG4IYVAGJI3JMX'},{'domain': '.jd.com', 'expiry': 1732935018, 'httpOnly': False, 'name': '__jdu', 'path': '/', 'sameSite': 'Lax','secure': False, 'value': '1717382950957103922947'},{'domain': '.jd.com', 'httpOnly': False, 'name': 'ceshi3.com', 'path': '/', 'sameSite': 'None', 'secure': True,'value': '000'},{'domain': '.jd.com', 'expiry': 1718678950, 'httpOnly': False, 'name': '__jdv', 'path': '/', 'sameSite': 'Lax','secure': False, 'value': '76161171|direct|-|none|-|1717382950958'}]for cookie in cookies:driver.add_cookie(cookie)##driver.refresh()driver.get(url)def click_verify():# 图标点选try:##截图保存img = ImageGrab.grab(bbox=(759, 421, 1141, 793))img.save('./sel.jpg')with open(r'./sel.jpg', 'rb') as f:im =f.read()##图像识别ret=y.click_verify(image=im,verify_type="30330")print("ret="+ret)ret=str(ret)pos=ret.split(',')pos[0]=int(pos[0])pos[1] = int(pos[1])# 移动鼠标到起始位置pyautogui.moveTo(pos[0]+759, pos[1]+421, duration=0.3)# 按下鼠标左键pyautogui.mouseDown()# 松开鼠标左键pyautogui.mouseUp()time.sleep(2)##失败 再次点选click_verify()return Trueexcept Exception as e:print('click_verify err:', e)return Falsedef slide_verify():##滑块验证try:ele_big = driver.find_element(By.ID, "cpc_img")ele_small = driver.find_element(By.ID, "small_img")src_big = ele_big.get_attribute('src')# print(src_big)src_small = ele_small.get_attribute('src')# 获取标准的base64字符串base64_big = src_big[22:]base64_small = src_small[22:]lo_small = [804, 753]##计算缺口滑块距离ret=y.slide_verify(base64_small,base64_big)ret=int(ret)+30print(ret)##鼠标操作slide_mouse(lo_small,ret )return Trueexcept Exception as e:print('card_slide err:', e)##转到点选验证ret=click_verify()if ret==True:return Trueelse:return Falsereturn Falsedef slide_mouse(pos,distance):##滑块验证 移动鼠标start_x = pos[0]start_y = pos[1]end_x = pos[0] + distanceend_y = pos[1]# 移动鼠标到起始位置pyautogui.moveTo(start_x, start_y, duration=0.3)# 按下鼠标左键pyautogui.mouseDown()# 往右多拖到20xppyautogui.moveTo(end_x - 20, end_y - 20, duration=0.4)#拖回结束位置pyautogui.moveTo(end_x, end_y, duration=0.5)# 松开鼠标左键pyautogui.mouseUp()if __name__ == '__main__':##chromedriver.exe 位置:C:\Users\Administrator\AppData\Local\Programs\Python\Python311driver = webdriver.Chrome()login(driver)time.sleep(5)##自动输入卡号driver.find_element(By.XPATH,'/html/body/div[4]/div/div/div[2]/div/div[1]/div/div/div/div/div[2]/div[2]/div[2]/input').send_keys(card_id)##点击按钮driver.execute_script('document.querySelector("#root > div:nth-child(1) > div > div > div > div > div.bind-card > div.bind-form.clearfix > div:nth-child(3) > div").click()')time.sleep(3)# 滑块验证、点选验证for index in range(100):print('滑块验证,执行第: ', index)if not slide_verify():breaktime.sleep(3)time.sleep(10)

七、python通过selenium自动登录及轻松过滑块验证、点选验证码视频演示

python通过selenium自动登录及轻松过滑块验证、点选验证码改进版视频演示_哔哩哔哩_bilibili

技术支持:

metabycf

相关文章:

python通过selenium实现自动登录及轻松过滑块验证、点选验证码(2024-06-14)

一、chromedriver配置环境搭建 请确保下载的驱动程序与你的Chrome浏览器版本匹配,以确保正常运行。 1、Chrome版本号 chrome的地址栏输入chrome://version,自然就得到125.0.6422.142 版本 125.0.6422.142(正式版本) (…...

【C++】开源项目收集

C 是一种强大的、静态类型的通用编程语言,它的开源生态系统非常丰富,拥有众多高质量的项目。以下是一些知名的C开源项目: Boost: 这是一个庞大的库集合,提供了大量的实用工具和组件,如文件系统、网络编程、智能指针等&…...

爬虫相关面试题

一,如何抓取一个网站? 1,去百度和谷歌搜一下这个网站有没有分享要爬取数据的API 2, 看看电脑网页有没有所需要的数据,写代码测试调查好不好拿,如果好拿直接开始爬取 3,看看有没有电脑能打开的手机网页&a…...

Spring Cloud Netflix 之 Ribbon

前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家:https://www.captainbed.cn/z ChatGPT体验地址 文章目录 前言前言1、负载均衡1.1、服务端负载均衡1.2、客户端负载均衡 2、Ribbon实现服务…...

C语言怎样记住那么多的颜⾊?

一、问题 ⾚、橙、⻩、绿、⻘、蓝、紫,如此之多的颜⾊,数字不好记,英⽂看程序还可以, 直接写也不好写。那么怎样记住那么多的颜⾊呢? 二、解答 颜⾊枚举值如下: enum COLORS {BLACK, /*O⿊*/BLUE, …...

LabVIEW软件开发任务的工作量估算方法

在开发LabVIEW软件时,如何准确估算软件开发任务的工作量。通过需求分析、功能分解、复杂度评估和资源配置等步骤,结合常见的估算方法,如专家判断法、类比估算法和参数估算法,确保项目按时按质完成,提供项目管理和资源分…...

【已解决】引入 element 组件无法使用编译错误 ERROR Failed to compile with 1 error

如果大家使用这个vue 配合 element 框架不熟练,当你顺利按照文档安装好 vue 和 element 的时候想要使用element 的组件时候确无法展示出来,甚至报错。不妨看看是不是这个问题, 1.首先使用element 的时候,前提是把必须要的 elemen…...

Prometheus的四种指标类型

目录 一、Counter 计数器 1.1Counter 是计数器类型 1.2Counter 类型示例 二、Gauge 仪表盘 2.1Gauge是测量器类型 2.2Gauge 类型示例 三、Histogram 累积直方图 3.1Histogram 作用及特点 3.2使用 histogram 柱状图 四、Summary 摘要 一、Counter 计数器 1.1Counter …...

FastDFS SpringBoot 客户端 Demo搭建,支持文件上传下载

一、准备 fastdfs-client-java 依赖包 1、从 Git 下载 FastDFS java client SDK 源码 https://github.com/happyfish100/fastdfs-client-java.git<fastdfs-client-java 源码见附件> 2、使用ant从源码构建 ant clean package3、使用maven从源码安装 mvn clean instal…...

十大成长型思维:定位思维、商业思维、时间管理思维、学习成长思维、精力管理思维、逻辑表达思维、聚焦思维、金字塔原理、目标思维、反思思维

一、定位思维 定位思维是一种在商业和管理领域中至关重要的思维模式&#xff0c;它涉及到如何在顾客心智中确立品牌的独特位置&#xff0c;并使其与竞争对手区分开来。以下是关于定位思维的清晰介绍&#xff1a; 1、定义 定位思维是一种从潜在顾客的心理认知出发&#xff0c;通…...

GraphQL(9):Spring Boot集成Graphql简单实例

1 安装插件 我这边使用的是IDEA&#xff0c;需要先按照Graphql插件&#xff0c;步骤如下&#xff1a; &#xff08;1&#xff09;打开插件管理 在IDEA中&#xff0c;打开主菜单&#xff0c;选择 "File" -> "Settings" (或者使用快捷键 Ctrl Alt S …...

vue3+ Element-Plus 点击勾选框往input中动态添加多个tag

实现效果&#xff1a; template&#xff1a; <!--产品白名单--><div class"con-item" v-if"current 0"><el-form-item label"平台名称"><div class"contaion" click"onclick"><!-- 生成的标签 …...

唯美仙侠手游【九幽仙域】win服务端+GM后台+详细教程

资源下载地址&#xff1a;九幽仙域搭建-...

Qt creator day2练习

使用手动连接&#xff0c;将登录框中的取消按钮使用第二种方式&#xff0c;右击转到槽&#xff0c;在该函数中&#xff0c;调用关闭函数&#xff0c;将登录按钮使用Qt4版本的连接到自定义的槽函数中&#xff0c;在槽函数中判断ui界面上输入的账号是否为“admin”&#xff0c;密…...

哪里有海量的短视频素材,以及短视频制作教程?

在当下&#xff0c;短视频已成为最火爆的内容形式之一&#xff0c;尤其是在抖音上。但很多创作者都面临一个问题&#xff1a;视频素材从哪里来&#xff1f;怎么拍摄才能吸引更多观众&#xff1f;别担心&#xff0c;今天我将为大家推荐几个宝藏网站&#xff0c;确保你素材多到用…...

文章MSM_metagenomics(三):Alpha多样性分析

欢迎大家关注全网生信学习者系列&#xff1a; WX公zhong号&#xff1a;生信学习者Xiao hong书&#xff1a;生信学习者知hu&#xff1a;生信学习者CDSN&#xff1a;生信学习者2 介绍 本教程使用基于R的函数来估计微生物群落的香农指数和丰富度&#xff0c;使用MetaPhlAn prof…...

Web前端与其他前端:深度对比与差异性剖析

Web前端与其他前端&#xff1a;深度对比与差异性剖析 在快速发展的前端技术领域&#xff0c;Web前端无疑是其中最耀眼的明星。然而&#xff0c;当我们谈论前端时&#xff0c;是否仅仅指的是Web前端&#xff1f;实际上&#xff0c;前端技术还包括了许多其他细分领域。本文将从四…...

AI 客服定制:LangChain集成订单能力

为了提高AI客服的问题解决能力&#xff0c;我们引入了LangChain自定义能力&#xff0c;并集成了订单能力。这使得AI客服可以根据用户提出的问题&#xff0c;自动调用订单接口&#xff0c;获取订单信息&#xff0c;并结合文本知识库内容进行回答。这种能力的应用&#xff0c;使得…...

【计算机毕业设计】242基于微信小程序的外卖点餐系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…...

java程序监控linux服务器硬件,cpu、mem、disk等

实现 使用Oshi和Hutool工具包1、pom依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.github.oshi</groupId>&l…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了&#xff1a;一行…...

CentOS下的分布式内存计算Spark环境部署

一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架&#xff0c;相比 MapReduce 具有以下核心优势&#xff1a; 内存计算&#xff1a;数据可常驻内存&#xff0c;迭代计算性能提升 10-100 倍&#xff08;文档段落&#xff1a;3-79…...

基于Docker Compose部署Java微服务项目

一. 创建根项目 根项目&#xff08;父项目&#xff09;主要用于依赖管理 一些需要注意的点&#xff1a; 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件&#xff0c;否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)

UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中&#xff0c;UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化&#xf…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)

在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马&#xff08;服务器方面的&#xff09;的原理&#xff0c;连接&#xff0c;以及各种木马及连接工具的分享 文件木马&#xff1a;https://w…...

九天毕昇深度学习平台 | 如何安装库?

pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子&#xff1a; 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...

Java毕业设计:WML信息查询与后端信息发布系统开发

JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发&#xff0c;实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构&#xff0c;服务器端使用Java Servlet处理请求&#xff0c;数据库采用MySQL存储信息&#xff0…...

Web中间件--tomcat学习

Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机&#xff0c;它可以执行Java字节码。Java虚拟机是Java平台的一部分&#xff0c;Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...

Python实现简单音频数据压缩与解压算法

Python实现简单音频数据压缩与解压算法 引言 在音频数据处理中&#xff0c;压缩算法是降低存储成本和传输效率的关键技术。Python作为一门灵活且功能强大的编程语言&#xff0c;提供了丰富的库和工具来实现音频数据的压缩与解压。本文将通过一个简单的音频数据压缩与解压算法…...

迁移科技3D视觉系统:重塑纸箱拆垛场景的智能革命

一、传统拆垛场景的困局与破局之道 在汽车零部件仓库中&#xff0c;每天有超过2万只异形纸箱需要拆垛分拣。传统人工拆垛面临三大挑战&#xff1a; 效率瓶颈&#xff1a;工人每小时仅能处理200-300件&#xff0c;且存在间歇性疲劳安全隐患&#xff1a;20kg以上重箱搬运导致年…...