赞
踩
请确保下载的驱动程序与你的Chrome浏览器版本匹配,以确保正常运行。
chrome的地址栏输入chrome://version,自然就得到125.0.6422.142
版本 125.0.6422.142(正式版本) (64 位)
(图1Chrome版本号)
https://googlechromelabs.github.io/chrome-for-testing/
(图2最新chromedriver版本下载地址)
chromedriver --version
(图3查看chromedriver 版本号)
与python.exe同目录
(图4chromedriver.exe放置位置)
pip install selenium(出现下图是已经成功安装4.10.0版本了)
pip show selenium就可以查看版本号了(Version=4.10.0)
(图5查看selenium版本号)
pip uninstall selenium
输入pip install selenium==3.3.1(指定安装3.3.1版本)
Selenium添加Cookie来实现自动登录。
总的来说分两步
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
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重新加载
webdriver中提供了操作cookie的相关方法:
get_cookies() 获得cookie信息
add_cookie(cookie_dict) 添加cookie
delete_cookie(name) 删除特定(部分)的cookie
delete_all_cookies() 删除所有的cookie
- 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)
'运行
分为两步:一是取得元素(文本框、按钮等),二是执行输入、点击等操作。
在 Chrome 里,鼠标停留在文本框,使用“检查元素”功能,在下方的调试窗口,右键“复制->复制完整 XPath”(如下图),得到“文本框”对应的 XPath,使用 Selenium 提供的send_keys命令实现文本输入。
(图6Crome里取得元素 XPath)
执行输入
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是一个纯Python的GUI自动化工具,其目的是可以用程序自动控制鼠标和键盘操作,多平台支持(Windows,OS X,Linux)。
pip3 install 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] + distance
- end_y = pos[1]
- # 移动鼠标到起始位置
- pyautogui.moveTo(start_x, start_y, duration=0.3)
- # 按下鼠标左键
- pyautogui.mouseDown()
- # 往右多拖到20xp
- pyautogui.moveTo(end_x - 20, end_y - 20, duration=0.4)
- #拖回结束位置
- pyautogui.moveTo(end_x, end_y, duration=0.5)
- # 松开鼠标左键
- pyautogui.mouseUp()
'运行
- #模拟输入信息
- 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的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传入屏幕分辨率中的宽度和高度即可。
- 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, io
-
- from 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 ImageGrab
-
- from 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 True
- except Exception as e:
- print('click_verify err:', e)
- return False
-
-
- def 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)+30
- print(ret)
- ##鼠标操作
- slide_mouse(lo_small,ret )
- return True
- except Exception as e:
- print('card_slide err:', e)
- ##转到点选验证
- ret=click_verify()
- if ret==True:return True
- else:return False
- return False
-
-
- def slide_mouse(pos,distance):
- ##滑块验证 移动鼠标
-
- start_x = pos[0]
- start_y = pos[1]
- end_x = pos[0] + distance
- end_y = pos[1]
- # 移动鼠标到起始位置
- pyautogui.moveTo(start_x, start_y, duration=0.3)
- # 按下鼠标左键
- pyautogui.mouseDown()
- # 往右多拖到20xp
- pyautogui.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\Python311
- driver = 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():break
- time.sleep(3)
-
- time.sleep(10)
技术支持:
metabycf
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。