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…...
十大成长型思维:定位思维、商业思维、时间管理思维、学习成长思维、精力管理思维、逻辑表达思维、聚焦思维、金字塔原理、目标思维、反思思维
一、定位思维 定位思维是一种在商业和管理领域中至关重要的思维模式,它涉及到如何在顾客心智中确立品牌的独特位置,并使其与竞争对手区分开来。以下是关于定位思维的清晰介绍: 1、定义 定位思维是一种从潜在顾客的心理认知出发,通…...
GraphQL(9):Spring Boot集成Graphql简单实例
1 安装插件 我这边使用的是IDEA,需要先按照Graphql插件,步骤如下: (1)打开插件管理 在IDEA中,打开主菜单,选择 "File" -> "Settings" (或者使用快捷键 Ctrl Alt S …...
vue3+ Element-Plus 点击勾选框往input中动态添加多个tag
实现效果: template: <!--产品白名单--><div class"con-item" v-if"current 0"><el-form-item label"平台名称"><div class"contaion" click"onclick"><!-- 生成的标签 …...
唯美仙侠手游【九幽仙域】win服务端+GM后台+详细教程
资源下载地址:九幽仙域搭建-...
Qt creator day2练习
使用手动连接,将登录框中的取消按钮使用第二种方式,右击转到槽,在该函数中,调用关闭函数,将登录按钮使用Qt4版本的连接到自定义的槽函数中,在槽函数中判断ui界面上输入的账号是否为“admin”,密…...
哪里有海量的短视频素材,以及短视频制作教程?
在当下,短视频已成为最火爆的内容形式之一,尤其是在抖音上。但很多创作者都面临一个问题:视频素材从哪里来?怎么拍摄才能吸引更多观众?别担心,今天我将为大家推荐几个宝藏网站,确保你素材多到用…...
文章MSM_metagenomics(三):Alpha多样性分析
欢迎大家关注全网生信学习者系列: WX公zhong号:生信学习者Xiao hong书:生信学习者知hu:生信学习者CDSN:生信学习者2 介绍 本教程使用基于R的函数来估计微生物群落的香农指数和丰富度,使用MetaPhlAn prof…...
Web前端与其他前端:深度对比与差异性剖析
Web前端与其他前端:深度对比与差异性剖析 在快速发展的前端技术领域,Web前端无疑是其中最耀眼的明星。然而,当我们谈论前端时,是否仅仅指的是Web前端?实际上,前端技术还包括了许多其他细分领域。本文将从四…...
AI 客服定制:LangChain集成订单能力
为了提高AI客服的问题解决能力,我们引入了LangChain自定义能力,并集成了订单能力。这使得AI客服可以根据用户提出的问题,自动调用订单接口,获取订单信息,并结合文本知识库内容进行回答。这种能力的应用,使得…...
【计算机毕业设计】242基于微信小程序的外卖点餐系统
🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板ÿ…...
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…...
Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...
如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...
【2025年】解决Burpsuite抓不到https包的问题
环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...
ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...
均衡后的SNRSINR
本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt 根发送天线, n r n_r nr 根接收天线的 MIMO 系…...
力扣热题100 k个一组反转链表题解
题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...
