广州第二精神病院冯主任 发表于 2023-12-27 19:08:38

一个完整Python实战项目:selenium识别验证码实现自动登录,自动操作浏览器

最近都没啥时间,很久没更新了。
今天分享一下,如何用selenium识别验证码,实现自动登录以及获取数据。
目标:某东
话不多说直接开始
准备工作

环境

[*]Python 3.10
[*]Pycharm
模块使用

[*]import random
[*]import time
[*]from selenium import webdriver
[*]import pyautogui
[*]import base64
[*]import ddddocr
[*]import csv
win + R 输入cmd 输入安装命令 pip install 模块名 (如果你觉得安装速度比较慢, 你可以切换国内镜像源)
selenium: 自动化测试模块,模拟人的行为去操作浏览器 (获取网页相关数据内容)
正常浏览网站流程

[*]打开浏览器 访问网站
[*]输入商品名称, 回车/点击搜索
[*]输入账号密码
[*]浏览器商品数据信息 (第一页)
[*]继续浏览下一页
浏览器

[*]webdriver.Chrome() # 谷歌
[*]webdriver.Edge() # Edge
[*]webdriver.Firefox() # 火狐
建议大家用谷歌
打开浏览器可能会出现问题

[*]报错大概率原因是因为浏览器驱动问题
- 驱动路径
I. 当你驱动文件和你代码放在一起 / 你驱动文件在python目录下面 (可以不用写路径)
II. 给驱动文件路径
- 驱动版本
浏览器可能自动更新 --> 驱动文件版本也要更新
大版本一样, 小版本最相近的即可
[*]打开浏览器之后闪退
原因: 你的selenium版本是4.0的 需要加阻塞
运行完成程序之后, 自动结束程序…
代码展示

获取数据部分

selenium自动操作浏览器
# 打开浏览器
driver = webdriver.Chrome() # 谷歌
# 最大化浏览器窗口
driver.maximize_window()
# 访问网站
driver.get('https://www.jd.com/') 
输入商品名称, 回车/点击搜索按钮
通过元素定位, 找到搜索框/输入框, 然后输入内容
driver.find_element_by_id() 按 ID 查找元素
driver.find_element_by_class_name() 按类名查找元素
driver.find_element_by_css_selector() 通过 CSS 选择器查找元素
driver.find_element_by_xpath() 通过 XPath 查找元素
driver.find_element_by_id('key').send_keys('口红') # 输入关键字
driver.find_element_by_class_name('button').click() # 点击搜索按钮
# 设置等待元素加载
driver.implicitly_wait(10)

# 文章不理解的话,我还专门录制了视频讲解
# 和源码一起打包好了,都放在这个抠裙了:708525271 
输入账号密码, 登陆
driver.find_element_by_id('loginname').send_keys(account) # 输入账号
driver.find_element_by_id('nloginpwd').send_keys(password) # 输入密码
driver.find_element_by_id('loginsubmit').click() # 点击登陆 
获取商品的数据信息
找到商品数据对应标签位置

[*]find_element 定位获取一个
[*]find_elements 定位获取多个
执行页面滚动的操作
def drop_down():
    """执行页面滚动的操作"""# javascript
    for x in range(1, 12, 2):# 1 3 5 7 9在你不断的下拉过程中, 页面高度也会变的
      time.sleep(1)
      j = x / 9# 1/93/95/99/9
      # document.documentElement.scrollTop指定滚动条的位置
      # document.documentElement.scrollHeight 获取浏览器页面的最大高度
      js = 'document.documentElement.scrollTop = document.documentElement.scrollHeight * %f' % j
      driver.execute_script(js)

#设置等待元素加载过程
driver.implicitly_wait(10)
#下滑网页页面操作 通过selenium执行JS代码
drop_down()
# 返回列表
lis = driver.find_elements_by_class_name('gl-item')
# for循环遍历, 提取列表里面元素
for li in lis:
    title = li.find_element_by_css_selector('.p-name em').text
    price = li.find_element_by_css_selector('.p-price strong i').text
    commit = li.find_element_by_css_selector('.p-commit strong a').text
    shop = li.find_element_by_css_selector('.p-shop span a').text
    dit = {
      '标题': title,
      '价格': price,
      '评价': commit,
      '店铺': shop,
    }
    print(dit) 
验证码识别

模块
from selenium import webdriver
import base64
import time
import ddddocr
import pyautogui
import random
from password import account, password 
模拟登录
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) # 输入账号
driver.find_element_by_id('nloginpwd').send_keys(password) # 输入密码
driver.find_element_by_id('loginsubmit').click() # 点击登陆time.sleep(1) 
获取验证码图片
# 滑块
img_base6_1 = driver.find_element_by_css_selector('.JDJRV-smallimg img').get_attribute('src').split(',')[-1]
# 缺口
img_base6_2 = driver.find_element_by_css_selector('.JDJRV-bigimg img').get_attribute('src').split(',')[-1]
img_content_1 = base64.b64decode(img_base6_1)
with open('yzm_1.png', mode='wb') as f:
    f.write(img_content_1)
img_content_2 = base64.b64decode(img_base6_2)
with open('yzm_2.png', mode='wb') as f:
    f.write(img_content_2) 
识别验证码 滑块到缺口距离
det = ddddocr.DdddOcr(det=False, ocr=False)
res = det.slide_match(img_content_1, img_content_2, simple_target=True)
target = res['target'] * 0.67 
滑动滑块识别验证
pyautogui.click(x=1502, y=482, button='left') # 按住鼠标
pyautogui.dragTo(x=1502+target, y=482, duration=1.5)
print(res)

# 代码自取扣裙 708525271 
文章不理解的话,我还专门录制了视频讲解,和源码一起打包好了,上方自取

 
https://img-blog.csdnimg.cn/direct/8913090d644b49a7907d0b7be063b064.png
今天的分享就到这里,溜了溜了~

来源:https://www.cnblogs.com/hahaa/p/17930808.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: 一个完整Python实战项目:selenium识别验证码实现自动登录,自动操作浏览器