首页 > 编程语言 >一个完整Python实战项目:selenium识别验证码实现自动登录,自动操作浏览器获取某东数据

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

时间:2023-12-27 16:35:47浏览次数:43  
标签:浏览器 img selenium driver 某东 element 自动 import find

最近都没啥时间,很久没更新了。

今天分享一下,如何用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: 自动化测试模块,模拟人的行为去操作浏览器 (获取网页相关数据内容)

正常浏览网站流程

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

浏览器

  • webdriver.Chrome() # 谷歌
  • webdriver.Edge() # Edge
  • webdriver.Firefox() # 火狐

建议大家用谷歌

打开浏览器可能会出现问题

  1. 报错大概率原因是因为浏览器驱动问题
    - 驱动路径
    I. 当你驱动文件和你代码放在一起 / 你驱动文件在python目录下面 (可以不用写路径)
    II. 给驱动文件路径
    - 驱动版本
    浏览器可能自动更新 --> 驱动文件版本也要更新
    大版本一样, 小版本最相近的即可
  2. 打开浏览器之后闪退
    原因: 你的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() # 点击登陆

 

获取商品的数据信息

找到商品数据对应标签位置

  1. find_element 定位获取一个
  2. 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/9  3/9  5/9  9/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] * 0.67

 

滑动滑块识别验证

pyautogui.click(x=1502, y=482, button='left') # 按住鼠标
pyautogui.dragTo(x=1502+target, y=482, duration=1.5)
print(res)

# 代码自取扣裙 708525271

 

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

 

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

标签:浏览器,img,selenium,driver,某东,element,自动,import,find
From: https://www.cnblogs.com/hahaa/p/17930808.html

相关文章

  • Selenium自动化之弹窗处理
    1.前言我们在使用Selenium做Web自动化测试时,页面经常出现弹窗,如果不处理后续的测试脚本就无法正常运行,今天我们就带大家一起来学习如何处理Web页面上的弹窗。2.Web页面弹窗的分类弹窗通常有3种:Alert类型弹框、Confirm类型弹框、Prompt类型弹框,这种我们无法通过定位元素来操作。......
  • 给你一个网站,你如何来做自动化测试的?Web网站测试流程及方法
    我想大多数开始进行web端页面测试的人,一开始会的都是在页面上点点点,然后一看到页面上有什么图片失效啊,页面遮挡就觉得是找到了大bug;一开始我也是这样,尽管我很谨慎,很仔细,把页面上的每一个角落都看了几十遍,依然没有把页面上的点点点测好,当时真的是每天都过得提心吊胆。那给你一个网......
  • WIN7利用wifi搭建LAN网络,作为路由器自动分配UBUNTU的IP地址
    要在Windows7上利用WiFi搭建LAN网络并作为路由器自动分配Ubuntu的IP地址,你需要按照以下步骤操作:在Windows7上创建一个虚拟网络适配器。打开“控制面板”>“网络和共享中心”>“更改适配器设置”,然后右键单击空白区域,选择“新建连接或网络”。在弹出的窗口中,选择“设置新的网络或......
  • 上海普陀区政府大力支持北汇信息自动驾驶智能测试系统项目
    北汇信息自主研发的“自动驾驶智能测试系统”项目获得上海普陀区政府的强力支持。此项目符合普陀区政府为加速推动智能软件产业发展而制定的战略规划,旨在进一步落实《上海市推进新型基础设施建设行动方案》和《上海市促进在线新经济发展行动方案》等一系列创新措施。 上海普陀......
  • 怎样实现使用python实现自动排班
    自动排班是一项常见的任务,可以使用Python编程语言来实现。本文将介绍如何使用Python实现自动排班的步骤和技术。步骤一:收集排班需求和数据首先,您需要收集排班的需求和相关数据。这可能包括员工的工作时间、班次要求、休假时间等。您可以将这些数据存储在Excel表格、数据库或其他数......
  • 14通道自动灵敏度校准低功耗电容触摸传感器芯片Si314
    刷卡解锁、一步开门、远程监测、遇到风险自动宣布警报、智能联动等人们关于门锁各种看似遥不可及的梦想,因为智能锁的呈现一一变成实际。由于智能门锁的不断进化,人们关于智能家居也有了更多梦想和期待。将触摸屏引入智能门锁交互,让用户在智能锁的体会上更安全、更便利、更个性化。......
  • 验证jenkins自动化部署
    1.测试代码2.提交代码到git,触发构建3.在GitHub服务器上去看,是否已经触发 4.在Jenkins的控制台查看是否正在构建从下图中可以看出,正在构建5.查看当次构建的控制台日志说明已经启动成功6.查看Linux服务器,是否上传成功7.在Linux上使用命令jps,查看是否启动8.浏览器......
  • Jenkins自动化部署实现原理
     1.jdk环境,Jenkins是java语言开发的,因需要jdk环境。2.git/svn客户端,因一般代码是放在git/svn服务器上的,我们需要拉取代码。3.maven客户端,因一般java程序是由maven工程,需要maven打包,当然也有其他打包方式,如:gradle。4.Jenkins可以不用安装tomcat,只要有Java环境就可以,它可以自己启......
  • 人工智能智能制造自动化软件在制造业中的发展空间
    1.背景介绍制造业是现代社会的核心产业之一,其对于经济增长、就业和国家竞争力的贡献是非常重要的。然而,制造业也面临着许多挑战,如高成本、低效率、环境污染等。为了应对这些挑战,制造业需要不断发展和创新,以提高生产效率、降低成本、提高产品质量和环境友好性。人工智能(AI)和自动化技......
  • 人工智能在制造业自动化软件中的实际案例分析
    1.背景介绍制造业自动化软件的发展是人工智能在现实生活中的一个重要应用。在制造业中,人工智能技术的应用可以提高生产效率,降低成本,提高产品质量,降低人工操作的风险,实现智能化管理等。在制造业中,人工智能技术的应用主要包括以下几个方面:生产线自动化:通过使用机器人、自动化设备和传......