Selenium、cv2和pyautogui实现自动化登陆淘宝

简介: Selenium、cv2和pyautogui实现自动化登陆淘宝

安装selenium cv2 pyautogui


直接win+R 输入cmd打开窗口直接输入下面语法即可安装成功,其他两个库同理


pip install selenium

通用部分:先加载对应的谷歌浏览器,用selenium把目标网页打开,然后点开登陆页面


进入页面可以定位到登陆地址发现是一个文本,可以通过find_elements()方法中的By.LINK_TEXT来定位含连接的文本元素,也可以通过CLASS_NAME来寻找元素,先进行成功登陆


注意:此处我的版本是selenium4,不同版本语法不同,本人在此处因为不同版本selenium的语法不同导致定位不到元素,一定要找到对应版本,去查官方文档才是最准确的


方法一(selenium的click和send_key方法):

同理进入到登陆页面后通过find_elements的ID定位到账号和密码区域此处先click再send_key是为了模仿人输入,并且有一个间断,不然输入太快会显示不出来一个类似滑动验证的框
+10.png

browser.find_element(By.ID, 'fm-login-id').click()
time.sleep(2)
browser.find_element(By.ID, 'fm-login-id').send_keys(id)
time.sleep(2)
browser.find_element(By.ID, 'fm-login-password').click()
time.sleep(2)
browser.find_element(By.ID, 'fm-login-password').send_keys(pwd)
time.sleep(2)

方法二(selenium执行js语句)

但如果想要点击右侧的二维码来进行二维码验证,就必须得用执行js语句才能点击,xpath和class都无法进行定位

+11.png
方法二(cv2+pyautogui):


先要进行模板自动截取,调用webdriver的屏幕截取功能,然后用cv2的办法将两张图片进行定位,然后通过计算定位到目标图片的中心点,并通过pyautogui进行点击。此方法弊端就是需要自己截取目标图像并存放在同一个包下,这就削弱了自动化的实用性,但是这是针对selenium在xpath和执行js都无法成功的条件下使用的办法,但是在这笔者试过匹配二维码图片来进行定位,鼠标定位不到图片的中心点因此卡了很久,最终还是选择用的selenium的执行js语句的办法。通常是多种办法实现。

+12.png

#保存图片
def save_pic(name):
  browser.maximize_window()
  browser.save_screenshot('./tb/' + name + '.png')
#进行模板的匹配
 def get_xy(pic_name):
  #获取模板和目标
  img_temp = cv2.imread('./tb/' + pic_name + '.png')
  img_target = cv2.imread('./tb/qrcode.png')
  #获取目标宽、高、通道数
  width, height, channel = img_target.shape
  #用matchTemplate进行模板匹配,用TM_SQDIFF_NORMED方差匹配
  result = cv2.matchTemplate(img_temp, img_target, cv2.TM_SQDIFF_NORMED)
  #成功匹配后获取匹配区域的左上目标
  upper_left = cv2.minMaxLoc(result)[2]
  #计算出右下角坐标
  lower_right = (upper_left[0] + width, upper_left[1] + height)
  # 计算坐标的平均值并将其返回
  avg = (int((upper_left[0] + lower_right[0]) / 2), int((upper_left[1] + lower_right[1]) / 2))
  return avg

全部代码

import cv2
import pyautogui
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from datetime import datetime
#对应浏览器加载
browser = webdriver.Chrome()
#防止pyautogui失控,调用为True
pyautogui.FAILSAFE = True
##方法3通过模板匹配进行点击
# def get_xy(pic_name):
#   #获取模板和目标
#   img_temp = cv2.imread('./tb/' + pic_name + '.png')
#   img_target = cv2.imread('./tb/qrcode.png')
#   #获取目标宽、高、通道数
#   width, height, channel = img_target.shape
#   #用matchTemplate进行模板匹配,用TM_SQDIFF_NORMED方差匹配
#   result = cv2.matchTemplate(img_temp, img_target, cv2.TM_SQDIFF_NORMED)
#   #成功匹配后获取匹配区域的左上目标
#   upper_left = cv2.minMaxLoc(result)[2]
#   #计算出右下角坐标
#   lower_right = (upper_left[0] + width, upper_left[1] + height)
#   # 计算坐标的平均值并将其返回
#   avg = (int((upper_left[0] + lower_right[0]) / 2), int((upper_left[1] + lower_right[1]) / 2))
#   return avg
#进行模板截图并存储,方便匹配
def save_pic(name):
  browser.maximize_window()
  browser.save_screenshot('./tb/' + name + '.png')
def get_url(url, pic_name):
  #进入目标网站,保存照片
  browser.get(url)
  time.sleep(4)
  browser.find_element(By.LINK_TEXT, '亲,请登录').click()
  save_pic(pic_name)
  time.sleep(4)
##方法1.自动输入账号密码
# def login(id, pwd):
#   browser.find_element(By.ID, 'fm-login-id').click()
#   time.sleep(2)
#   browser.find_element(By.ID, 'fm-login-id').send_keys(id)
#   time.sleep(2)
#   browser.find_element(By.ID, 'fm-login-password').click()
#   time.sleep(2)
#   browser.find_element(By.ID, 'fm-login-password').send_keys(pwd)
#   time.sleep(2)
##方法2.webdriver执行js语句用qrcode登陆
def qrcode():
  browser.execute_script('document.getElementsByClassName("iconfont icon-qrcode")[0].click()')
if __name__ == "__main__":
  url = input('请输入目标网站地址:')
  pic_name = input('请输入模板照片名字:')
  # id_input = input("请输入账号:")
  # pwd_input = input("请输入密码:")
  get_url(url, pic_name)
  # avg = get_xy(pic_name)
  # pyautogui.click(avg[0], avg[1], button='left')
  time.sleep(4)
  qrcode()

更新:对滑动验证码的反爬


有些网站可能是需要滑动滑块来动态验证的反爬机制,通常是点击下方滑键才会出现需要将滑块对应在图片的空缺处。首先我们应该获取到完整的图片,可以获取到图片元素所在的位置和尺寸来获取图片的坐标,然后我们对整个屏幕来张截图,再对这张截图来根据图片的坐标来截取图片。


+13.png

目录
相关文章
|
2月前
|
数据采集 测试技术 Python
自动化淘宝秒杀:使用Selenium WebDriver的实战指南
本文详细介绍了如何利用Selenium WebDriver自动化淘宝秒杀操作,包括环境配置、代码实现及注意事项,旨在帮助读者提升秒杀成功率,同时提醒合理使用以遵守平台规则。
114 8
|
3月前
|
数据采集 存储 JavaScript
自动化数据处理:使用Selenium与Excel打造的数据爬取管道
本文介绍了一种使用Selenium和Excel结合代理IP技术从WIPO品牌数据库(branddb.wipo.int)自动化爬取专利信息的方法。通过Selenium模拟用户操作,处理JavaScript动态加载页面,利用代理IP避免IP封禁,确保数据爬取稳定性和隐私性。爬取的数据将存储在Excel中,便于后续分析。此外,文章还详细介绍了Selenium的基本设置、代理IP配置及使用技巧,并探讨了未来可能采用的更多防反爬策略,以提升爬虫效率和稳定性。
180 4
|
17天前
|
Web App开发 数据采集 JavaScript
CDP与Selenium相结合——玩转网页端自动化数据采集/爬取程序
本文介绍了Selenium、Chrome DevTools及Chrome DevTools Protocol (CDP) 的基本功能与应用。Selenium是一款开源自动化测试工具,适用于网页端应用程序测试和数据采集,具备跨平台特性。Chrome DevTools内置浏览器中,提供调试、分析Web应用程序的功能,包括元素、控制台、源代码和网络选项卡等。CDP是一套用于与Chromium内核浏览器通信的API,支持自动化测试和性能分析。文中还展示了Selenium与CDP结合使用的示例,如捕获网络请求数据和打印网页内容,并推荐了相关书籍和资源以供深入学习。
130 39
CDP与Selenium相结合——玩转网页端自动化数据采集/爬取程序
|
26天前
|
Web App开发 IDE JavaScript
Selenium IDE:Web自动化测试的得力助手
Selenium IDE:Web自动化测试的利器。作为开源工具,Selenium IDE支持录制与回放用户操作,适用于Chrome、Firefox等多浏览器,简化了测试流程,提升了效率,降低了自动化测试的门槛。它还支持导出多种编程语言的脚本,便于测试集成与复用。
76 19
Selenium IDE:Web自动化测试的得力助手
|
28天前
|
Web App开发 IDE 测试技术
Selenium:强大的 Web 自动化测试工具
Selenium 是一款强大的 Web 自动化测试工具,包括 Selenium IDE、WebDriver 和 Grid 三大组件,支持多种编程语言和跨平台操作。它能有效提高测试效率,解决跨浏览器兼容性问题,进行性能测试和数据驱动测试,尽管存在学习曲线较陡、不稳定等缺点,但其优势明显,是自动化测试领域的首选工具。
155 17
Selenium:强大的 Web 自动化测试工具
|
3月前
|
Java 测试技术 C#
自动化测试之美:从Selenium到Appium
【10月更文挑战第3天】在软件开发的海洋中,自动化测试如同一艘航船,引领着质量保证的方向。本文将带你领略自动化测试的魅力,从Web端的Selenium到移动端的Appium,我们将一探究竟,看看这些工具如何帮助我们高效地进行软件测试。你将了解到,自动化测试不仅仅是技术的展示,更是一种提升开发效率和产品质量的智慧选择。让我们一起启航,探索自动化测试的世界!
|
3月前
|
JavaScript 前端开发 测试技术
精通Selenium:从基础到高级的网页自动化测试策略
【10月更文挑战第6天】随着Web应用变得越来越复杂,手动进行功能和兼容性测试变得既耗时又容易出错。自动化测试因此成为了现代软件开发不可或缺的一部分。Selenium是一个强大的工具集,它支持多种编程语言(包括Python),允许开发者编写脚本来模拟用户与Web页面的交互。本文将带领读者从Selenium的基础知识出发,逐步深入到高级的应用场景,通过丰富的代码示例来展示如何高效地进行网页自动化测试。
617 5
|
3月前
|
Web App开发 IDE 测试技术
自动化测试的利器:Selenium 框架深度解析
【10月更文挑战第2天】在软件开发的海洋中,自动化测试犹如一艘救生艇,让质量保证的过程更加高效与精准。本文将深入探索Selenium这一强大的自动化测试框架,从其架构到实际应用,带领读者领略自动化测试的魅力和力量。通过直观的示例和清晰的步骤,我们将一起学习如何利用Selenium来提升软件测试的效率和覆盖率。
|
2月前
|
Web App开发 设计模式 JavaScript
自动化测试之美:如何利用Selenium实现Web应用的高效测试
【10月更文挑战第29天】在软件开发的世界中,测试是确保产品质量的关键步骤。本文将带你了解如何使用Selenium这一强大的自动化测试工具,提高Web应用测试的效率和准确性。通过实际案例,我们将探索Selenium的核心功能及其在现代软件开发中的应用,旨在帮助读者掌握自动化测试的精髓,从而提升软件测试工作的整体效能。
54 0
|
3月前
|
测试技术 数据安全/隐私保护 开发者
自动化测试的奥秘:如何用Selenium和Python提升软件质量
【9月更文挑战第35天】在软件开发的海洋中,自动化测试是那艘能引领我们穿越波涛的帆船。本文将揭开自动化测试的神秘面纱,以Selenium和Python为工具,展示如何构建一个简单而强大的自动化测试框架。我们将从基础出发,逐步深入到高级应用,让读者能够理解并实现自动化测试脚本,从而提升软件的质量与可靠性。