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

东莞做网站 汇卓小程序注册好了怎么办开始使用

东莞做网站 汇卓,小程序注册好了怎么办开始使用,seo资源,微信公众号制作图文前言 代码直接运行即可 此处是用的selenium模拟#xff0c;主要记录的难点是如何 模拟人工滑速 具体原理和利用到的东西都有做注释#xff0c;逻辑完整#xff0c;小白还是可以尝试理解的 一、正常简单模拟滑动 目标网址#xff1a;点击 import base64 import time im…前言 代码直接运行即可 此处是用的selenium模拟主要记录的难点是如何 模拟人工滑速 具体原理和利用到的东西都有做注释逻辑完整小白还是可以尝试理解的 一、正常简单模拟滑动 目标网址点击 import base64 import time import ddddocr from selenium import webdriver from selenium.webdriver.common.by import Bydef text_dis(bg, fg):slide ddddocr.DdddOcr(detFalse, ocrFalse)with open(bg, rb) as f:target_bytes f.read()with open(fg, rb) as f:background_bytes f.read()res slide.slide_comparison(target_bytes, background_bytes) # 计算出距离return res.get(target)[0]def get_slide():options webdriver.ChromeOptions()# 对于老版本的浏览器不行options.add_argument(--disable-blink-featuresAutomationControlled)driver webdriver.Chrome(chrome_optionsoptions)driver.maximize_window()driver.get(https://www.geetest.com/demo/slide-bind.html)driver.find_element(By.ID, username).send_keys(13697028751) # 输入框输入账号和密码driver.find_element(By.ID, password).send_keys(19961227ai)time.sleep(2)driver.find_element(By.CSS_SELECTOR, div.btn).click() # 点击登录time.sleep(2)img_src driver.execute_script(return document.getElementsByClassName(geetest_canvas_bg geetest_absolute)[0].toDataURL(image/png);)print(img_src)im_base64 img_src.split(,)[1]im_bytes base64.b64decode(im_base64)print(im_base64)print(im_bytes)print(-----------------------------------)with open(./bg.png, wb) as f:f.write(im_bytes)temp driver.execute_script(return document.getElementsByClassName(geetest_canvas_fullbg geetest_fade geetest_absolute)[0].toDataURL(image/png);)print(temp)temp_base64 temp.split(,)[1]temp_bytes base64.b64decode(temp_base64)with open(./temp.png, wb) as f:f.write(temp_bytes)distance text_dis(bg.png, temp.png) # 计算出距离print(距离:, distance)# 拖动滑块slide driver.find_element(By.CSS_SELECTOR, div.geetest_slider_button)action_chains webdriver.ActionChains(driver)# 点击准备拖拽action_chains.click_and_hold(slide) # 鼠标左键点击但不释放action_chains.pause(0.2)action_chains.move_by_offset(distance - 10, 0)action_chains.pause(0.8)action_chains.move_by_offset(10, 0)action_chains.pause(1.4)action_chains.move_by_offset(-10, 0)action_chains.release()action_chains.perform()time.sleep(20)get_slide() 扩展 selenium常用模拟操作 1、行为控制 perform --- 执行所有准备好的Action reset_actions --- 清空所有准备好的Action  # 该方法在 selenium 3.141.0版本不生效 pause --- 设置Action之间的动作时间间隔2、鼠标操作 click --- 鼠标左键点击(可以指定或不指定元素对象) click_and_hold --- 鼠标左键点击但不释放(可以指定或不指定元素对象) release --- 释放鼠标点击动作(可以指定或不指定在目标元素对象上释放) context_click --- 鼠标右键点击(可以指定或不指定元素对象) double_click --- 鼠标左键双击(可以指定或不指定元素对象) drag_and_drop --- 鼠标左键在两个元素之间拖拽 drag_and_drop_by_offset --- 鼠标左键拖拽元素到目标偏移位置 move_by_offset --- 鼠标移动指定偏移 move_to_element --- 鼠标移动到指定元素 move_to_element_with_offset --- 鼠标移动到指定元素的指定偏移位置二、应对滑速检测代码 目标网址点击 #!/usr/bin/env python # -*- coding:utf-8 -*- import json import random import re import time import cv2 import base64 import os import numpy as np from PIL import Image from selenium import webdriver from selenium.webdriver import ActionChains from selenium.webdriver import ChromeOptions from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.wait import WebDriverWaitdef get_random_float(min, max, digits4):return round(random.uniform(min, max), 4)def base64_to_image(base64_code, img_name):dir_path re.sub(r/([a-z]|_|-)*.(png|jp(e)?g)$, , img_name)if not os.path.exists(dir_path):os.makedirs(dir_path)img_data base64.b64decode(base64_code)file open(img_name, wb)file.write(img_data)file.close()return img_nameclass JD_Register(object):# jd 注册页面验证码def __init__(self, url, username, pwd):super(JD_Register, self).__init__()self.url url # 实际地址options ChromeOptions()options.add_experimental_option(excludeSwitches, [enable-automation])self.driver webdriver.Chrome(optionsoptions)self.wait WebDriverWait(self.driver, 10)self.username username # 账户信息self.password pwdself.target_path ./target_reg.pngself.template_path ./template_reg.pngself.zoom 1 # 网页图片缩放def open_url(self, urlNone):self.driver.maximize_window()self.driver.get(url if url else self.url)def main(self):self.open_url() # 打开网页self.loginOn() # 登录打开验证码self._crack_slider() # 模拟人滑动验证码def loginOn(self):print(------------------------ 进度1填写账号~)self.driver.find_element(By.XPATH, /html/body/div[4]/div[2]/div/div[2]/button).click() # 同意time.sleep(2)self.driver.find_element(By.ID, form-phone).send_keys(13697028751) # 输入框输入账号和密码time.sleep(2)self.driver.find_element(By.CLASS_NAME, form-item-getcode).click() # 点击登录time.sleep(2)def _crack_slider(self):pic_success self._get_pic() # 获取图片if pic_success:# 模板匹配target cv2.imread(self.target_path) # 查看完整图片template cv2.imread(self.template_path) # 查看缺少图片distance self._match_templet(target, template) # 计算缺口最大距离tracks self._get_tracks(distance * self.zoom) # 拖拽轨迹计算self._slider_action(tracks) # 模拟人工移动滑块# 判断登录is_go_on input(是否继续测试y是 其它退出)if is_go_on and is_go_on.lower() y:print(开始下一次尝试)return self._crack_slider()else:return Falsedef _get_pic(self):下载图片到本地# print(查找缺口图片)time.sleep(1)target self.wait.until(EC.presence_of_element_located((By.XPATH, //*[idslideAuthCode]/div/div[1]/div[2]/div[1]/img)))template self.wait.until(EC.presence_of_element_located((By.XPATH, //*[idslideAuthCode]/div/div[1]/div[2]/div[2]/img)))if target and template:print(------------------------ 进度2下载滑块验证码图片)target_base64 target.get_attribute(src)template_base64 template.get_attribute(src)target_base64_str re.sub(rdata:[a-z]*/[a-z]*;base64,, , target_base64)template_base64_str re.sub(rdata:[a-z]*/[a-z]*;base64,, , template_base64)base64_to_image(target_base64_str, self.target_path)base64_to_image(template_base64_str, self.template_path)time.sleep(1)local_img Image.open(self.target_path) # 打开图片size_loc local_img.size # 获取图片大小尺寸self.zoom 364 / int(size_loc[0]) # 对比判断图片是否一致有无放大过print(计算缩放比例 zoom %f % round(self.zoom, 4))return Trueelse:print(未找到缺口图片)return Falsedef _match_templet(self, img_target, img_template):模板匹配用于寻找缺口:param img_target: 带有缺口的背景图:param img_template: 缺口的滑块图:return: 缺口所在的位置的x轴距离print(------------------------ 进度3图片缺口模板匹配)# 滑块图片处理tpl self.__handle_slider_img(img_template) # 误差来源就在于滑块的背景图为白色blurred cv2.GaussianBlur(img_target, (3, 3), 0) # 图片高斯滤波gray cv2.cvtColor(blurred, cv2.COLOR_BGR2GRAY) # 图片灰度化width, height tpl.shape[:2]result cv2.matchTemplate(gray, tpl, cv2.TM_CCOEFF_NORMED) # 灰度化模板匹配 使用灰度化图片print(result {}.format(len(np.where(result 0.5)[0])))# 查找数组中匹配的最大值min_val, max_val, min_loc, max_loc cv2.minMaxLoc(result)left_up max_locright_down (left_up[0] height, left_up[1] width) # 通过获取最远距离cv2.rectangle(img_target, left_up, right_down, (7, 279, 151), 2)print(验证码位移距离为%d % left_up[0])return left_up[0]def __handle_slider_img(self, image):对滑块进行二值化处理:param image: cv类型的图片对象kernel np.ones((8, 8), np.uint8) # 去滑块的前景噪声内核gray cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 灰度化# 灰化背景width, heigth gray.shapefor h in range(heigth):for w in range(width):if gray[w, h] 0:gray[w, h] 96# 排除背景binary cv2.inRange(gray, 96, 96)res cv2.morphologyEx(binary, cv2.MORPH_OPEN, kernel) # 开运算去除白色噪点return resdef _get_cookie(self):cookie_items self.driver.get_cookies()ck_dict {}for cookie in cookie_items:ck_dict[cookie[name]] cookie[value]print(cookie %s % ck_dict)self._save_to_file(json.dumps(ck_dict, separators(,, :), ensure_asciiFalse))self.driver.quit()def _save_to_file(self, str_data):file Nonetry:file open(../static/temp/cookie.txt, w)file.write(str_data)except:print(保存cookie异常)finally:if file:file.close()# ---- 拖拽轨迹计算 start ----def _get_tracks(self, distance):根据偏移量获取移动轨迹3:param distance: 偏移量:return: 移动轨迹print(------------------------ 进度4计算图片拖拽轨迹)track []mid1 round(distance * random.uniform(0.1, 0.2))mid2 round(distance * random.uniform(0.65, 0.76))mid3 round(distance * random.uniform(0.84, 0.88))# 设置初始位置、初始速度、时间间隔current, v, t 0, 0, 0.2distance round(distance)# 四段加速度while current distance:if current mid1:a random.randint(10, 15)elif current mid2:a random.randint(30, 40)elif current mid3:a -70else:a random.randint(-25, -18)v0 v # 初速度 v0v v0 a * t # 当前速度 v v0 atv v if v 0 else 0move v0 * t 1 / 2 * a * (t ** 2)move round(move if move 0 else 1)current move # 当前位移track.append(move) # 加入轨迹# 超出范围back_tracks []out_range distance - currentprint(当前 {}, 距离 {}, 超出范围 {}.format(current, distance, out_range))if out_range -8:sub int(out_range 8)back_tracks [-1, sub, -3, -1, -1, -1, -1]elif out_range -2:sub int(out_range 3)back_tracks [-1, -1, sub]print(向前轨道 {}, 返回轨道{}.format(track, back_tracks))return {forward_tracks: track, back_tracks: back_tracks}# ---- 移动滑块 start ----def _slider_action(self, tracks):print(------------------------ 进度5模拟人工移动滑块)# 点击滑块slider self.wait.until(EC.element_to_be_clickable((By.XPATH, //*[idslideAuthCode]/div/div[2]/div[3])))if slider:ActionChains(self.driver).click_and_hold(slider).perform() # 鼠标左键点击不释放保持滑动状态# 正向滑动for track in tracks[forward_tracks]:yoffset_random random.uniform(-2, 4)ActionChains(self.driver).move_by_offset(xoffsettrack, yoffsetyoffset_random).perform()time.sleep(random.uniform(0.06, 0.5))# 反向滑动for back_tracks in tracks[back_tracks]:yoffset_random random.uniform(-2, 2)ActionChains(self.driver).move_by_offset(xoffsetback_tracks, yoffsetyoffset_random).perform()# 抖动ActionChains(self.driver).move_by_offset(xoffsetget_random_float(0, -1.67), yoffsetget_random_float(-1, 1)).perform()ActionChains(self.driver).move_by_offset(xoffsetget_random_float(0, 1.67), yoffsetget_random_float(-1, 1)).perform()time.sleep(get_random_float(0.2, 0.6))ActionChains(self.driver).release().perform()print(滑块移动成功)return Trueelse:print(未找到滑块)return Falseif __name__ __main__:c JD_Register(urlhttps://reg.jd.com/p/regPage, username13965216565)c.main()
http://www.sadfv.cn/news/118611/

相关文章:

  • 网站集约化后如何建设潍坊建立企业网站公司
  • 网站会员功能万维建设网站
  • 用自己电脑怎么做网站深圳企业网站制作中心
  • 安徽手机版建站系统信息网站建设流程 报读文库
  • 精品课程建设网站清单新网站建设的流程
  • 网站首页html代码的视频网站做视频节目赚钱吗
  • 佛山网站制作哪里实惠阳江网红打卡地方
  • 怎样建设大型网站湖北商城网站建设多少钱
  • 网站建设评价指标京津冀协同发展纲要
  • 自己公司产品网站的好处网站开发技术写什么内容
  • 做电影下载网站宜兴网站建设公司
  • 顶针 东莞网站建设做网站推广的流程
  • 设计网站作品欣赏有那些网站建设银行网站登陆二星是什么意思
  • 做企业礼品的网站wordpress网页美化教程
  • 石柱县建设局网站网站建设能
  • 山西建设厅报名网站公益网站建设那家好
  • wordpress图纸管理网站大连h5开发公司
  • 佛山网站建设推广服务北京市建设工程发包承包交易中心网站
  • 购物网站建设珠海成都装修设计公司推荐
  • 网站建设预付wordpress设置默认首页
  • 长沙 网站设计 公司价格广安网站制作设计
  • 成都网站建设哪里有网站统计分析平台
  • 如何自已建网站软件开发工具的主要分类方法
  • 河北建设厅八大员报名网站可使用虚拟主机
  • 推广网站建设美食网站首页模板
  • 网站开通微信支付接口开发使用织梦系统建设网站
  • 找外包公司做网站做渔家乐哪个网站最好
  • 旅游电子商务网站建设费用铭泰东莞网站建设
  • 手机如何创建网站网站会员方案
  • 企业所得税计算公式2022seo外链推广员