积分与排名
- 积分 - 4002
- 排名 - 195329
文章档案
最新评论
- 1. Re:项目管理与SSM框架
泰酷拉
- --Rayajunhahaha
- 2. Re:selenium实现拼图滑动验证模拟登录QQ空间
1
- --YxinHaaa
from time import sleep import requests from selenium import webdriver from selenium.webdriver import ActionChains from selenium.webdriver import ChromeOptions import cv2 import numpy as np def login(): user = '' # 账号 pwd = '' # 密码 bro.get(url=url) sleep(2) bro.maximize_window() # 窗口最大化 sleep(3) bro.switch_to.frame('login_frame') pwd_login = bro.find_element_by_id('switcher_plogin') pwd_login.click() # 点击账号密码登录 sleep(1) user_input = bro.find_element_by_id('u') user_input.send_keys(user) # 输入账号 pwd_input = bro.find_element_by_id('p') pwd_input.send_keys(pwd) # 输入密码 sleep(2) sub_btn = bro.find_element_by_class_name('submit') sub_btn.click() # 点击登录 y = get_image_position() button = bro.find_element_by_id('tcaptcha_drag_thumb') ActionChains(bro).click_and_hold(on_element=button).perform() ActionChains(bro).move_to_element_with_offset(to_element=button, xoffset=int(y * 0.4 + 18), yoffset=0).perform() sleep(1) ActionChains(bro).release(on_element=button).perform() sleep(3) def get_image_position(): sleep(3) bro.switch_to.frame(bro.find_element_by_id('tcaptcha_iframe')) image1 = bro.find_element_by_id('slideBg').get_attribute('src') # 下载需要验证图 image2 = bro.find_element_by_id('slideBlock').get_attribute('src') # 下载缺口图 img1 = requests.get(image1, headers=header).content with open('slide_bkg.png', 'wb')as f: f.write(img1) img2 = requests.get(image2, headers=header).content with open('slide_block.png', 'wb')as f: f.write(img2) # 使用python的OpenCV模块识别滑动验证码的缺口 block = cv2.imread('slide_block.png', 0) template = cv2.imread('slide_bkg.png', 0) cv2.imwrite('template.jpg', template) cv2.imwrite('block.jpg', block) block = cv2.imread('block.jpg') block = cv2.cvtColor(block, cv2.COLOR_BGR2GRAY) block = abs(255 - block) cv2.imwrite('block.jpg', block) block = cv2.imread('block.jpg') template = cv2.imread('template.jpg') result = cv2.matchTemplate(block, template, cv2.TM_CCOEFF_NORMED) x, y = np.unravel_index(result.argmax(), result.shape) # print x, y return y if __name__ == '__main__': # 实现规避检测 option = ChromeOptions() option.add_experimental_option('excludeSwitches', ['enable-automation']) # 隐藏window.navigator.webdriver option.add_argument("--disable-blink-features=AutomationControlled") # 添加user-agent option.add_argument( 'user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36') header = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36' } # 实例化一个浏览器对象 bro = webdriver.Chrome(executable_path='chromedriver.exe', options=option) url = 'https://qzone.qq.com/' login()
__EOF__
作 者:YXH
出 处:https://www.cnblogs.com/YxinHaaa/p/14514493.html
关于博主:编程路上的小学生,热爱技术,喜欢专研。评论和私信会在第一时间回复。或者直接私信我。
版权声明:署名 - 非商业性使用 - 禁止演绎,协议普通文本 | 协议法律文本。
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
泰酷拉
1
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」