ToB企服应用市场:ToB评测及商务社交产业平台

标题: 一个完整Python实战项目:selenium识别验证码实现自动登录,自动操作浏览器 [打印本页]

作者: 饭宝    时间: 2024-3-4 23:14
标题: 一个完整Python实战项目:selenium识别验证码实现自动登录,自动操作浏览器
最近都没啥时间,很久没更新了。
今天分享一下,如何用selenium识别验证码,实现自动登录以及获取数据。
目标:某东
话不多说直接开始
准备工作

环境
模块使用
win + R 输入cmd 输入安装命令 pip install 模块名 (如果你觉得安装速度比较慢, 你可以切换国内镜像源)
selenium: 自动化测试模块,模拟人的行为去操作浏览器 (获取网页相关数据内容)
正常浏览网站流程
浏览器
建议大家用谷歌
打开浏览器可能会出现问题
代码展示

获取数据部分

selenium自动操作浏览器
  1. # 打开浏览器
  2. driver = webdriver.Chrome() # 谷歌
  3. # 最大化浏览器窗口
  4. driver.maximize_window()
  5. # 访问网站
  6. driver.get('https://www.jd.com/')
复制代码
 
输入商品名称, 回车/点击搜索按钮
通过元素定位, 找到搜索框/输入框, 然后输入内容
  1. driver.find_element_by_id() 按 ID 查找元素
  2. driver.find_element_by_class_name() 按类名查找元素
  3. driver.find_element_by_css_selector() 通过 CSS 选择器查找元素
  4. driver.find_element_by_xpath() 通过 XPath 查找元素
  5. driver.find_element_by_id('key').send_keys('口红') # 输入关键字
  6. driver.find_element_by_class_name('button').click() # 点击搜索按钮
  7. # 设置等待元素加载
  8. driver.implicitly_wait(10)
  9. # 文章不理解的话,我还专门录制了视频讲解
  10. # 和源码一起打包好了,都放在这个抠裙了:708525271
复制代码
 
输入账号密码, 登陆
  1. driver.find_element_by_id('loginname').send_keys(account) # 输入账号
  2. driver.find_element_by_id('nloginpwd').send_keys(password) # 输入密码
  3. driver.find_element_by_id('loginsubmit').click() # 点击登陆
复制代码
 
获取商品的数据信息
找到商品数据对应标签位置
执行页面滚动的操作
  1. def drop_down():
  2.     """执行页面滚动的操作"""  # javascript
  3.     for x in range(1, 12, 2):# 1 3 5 7 9  在你不断的下拉过程中, 页面高度也会变的
  4.         time.sleep(1)
  5.         j = x / 9  # 1/9  3/9  5/9  9/9
  6.         # document.documentElement.scrollTop  指定滚动条的位置
  7.         # document.documentElement.scrollHeight 获取浏览器页面的最大高度
  8.         js = 'document.documentElement.scrollTop = document.documentElement.scrollHeight * %f' % j
  9.         driver.execute_script(js)
  10. #设置等待元素加载过程
  11. driver.implicitly_wait(10)
  12. #下滑网页页面操作 通过selenium执行JS代码
  13. drop_down()
  14. # 返回列表
  15. lis = driver.find_elements_by_class_name('gl-item')
  16. # for循环遍历, 提取列表里面元素
  17. for li in lis:
  18.     title = li.find_element_by_css_selector('.p-name em').text
  19.     price = li.find_element_by_css_selector('.p-price strong i').text
  20.     commit = li.find_element_by_css_selector('.p-commit strong a').text
  21.     shop = li.find_element_by_css_selector('.p-shop span a').text
  22.     dit = {
  23.         '标题': title,
  24.         '价格': price,
  25.         '评价': commit,
  26.         '店铺': shop,
  27.     }
  28.     print(dit)
复制代码
 
验证码识别

模块
  1. from selenium import webdriver
  2. import base64
  3. import time
  4. import ddddocr
  5. import pyautogui
  6. import random
  7. from password import account, password
复制代码
 
模拟登录
  1. driver = webdriver.Edge(r'D:\自游\京东商品\msedgedriver.exe')driver.get('https://passport.jd.com/new/login.aspx')driver.maximize_window()driver.find_element_by_id('loginname').send_keys(account) # 输入账号
  2. driver.find_element_by_id('nloginpwd').send_keys(password) # 输入密码
  3. driver.find_element_by_id('loginsubmit').click() # 点击登陆time.sleep(1)
复制代码
 
获取验证码图片
  1. # 滑块
  2. img_base6_1 = driver.find_element_by_css_selector('.JDJRV-smallimg img').get_attribute('src').split(',')[-1]
  3. # 缺口
  4. img_base6_2 = driver.find_element_by_css_selector('.JDJRV-bigimg img').get_attribute('src').split(',')[-1]
  5. img_content_1 = base64.b64decode(img_base6_1)
  6. with open('yzm_1.png', mode='wb') as f:
  7.     f.write(img_content_1)
  8. img_content_2 = base64.b64decode(img_base6_2)
  9. with open('yzm_2.png', mode='wb') as f:
  10.     f.write(img_content_2)
复制代码
 
识别验证码 滑块到缺口距离
  1. det = ddddocr.DdddOcr(det=False, ocr=False)
  2. res = det.slide_match(img_content_1, img_content_2, simple_target=True)
  3. target = res['target'][0] * 0.67
复制代码
 
滑动滑块识别验证
  1. pyautogui.click(x=1502, y=482, button='left') # 按住鼠标
  2. pyautogui.dragTo(x=1502+target, y=482, duration=1.5)
  3. print(res)
  4. # 代码自取扣裙 708525271
复制代码
 
文章不理解的话,我还专门录制了视频讲解,和源码一起打包好了,上方自取

 

今天的分享就到这里,溜了溜了~

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4