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

目录
相关文章
|
1月前
|
数据采集 存储 JavaScript
自动化数据处理:使用Selenium与Excel打造的数据爬取管道
本文介绍了一种使用Selenium和Excel结合代理IP技术从WIPO品牌数据库(branddb.wipo.int)自动化爬取专利信息的方法。通过Selenium模拟用户操作,处理JavaScript动态加载页面,利用代理IP避免IP封禁,确保数据爬取稳定性和隐私性。爬取的数据将存储在Excel中,便于后续分析。此外,文章还详细介绍了Selenium的基本设置、代理IP配置及使用技巧,并探讨了未来可能采用的更多防反爬策略,以提升爬虫效率和稳定性。
|
1月前
|
Java 测试技术 C#
自动化测试之美:从Selenium到Appium
【10月更文挑战第3天】在软件开发的海洋中,自动化测试如同一艘航船,引领着质量保证的方向。本文将带你领略自动化测试的魅力,从Web端的Selenium到移动端的Appium,我们将一探究竟,看看这些工具如何帮助我们高效地进行软件测试。你将了解到,自动化测试不仅仅是技术的展示,更是一种提升开发效率和产品质量的智慧选择。让我们一起启航,探索自动化测试的世界!
|
1月前
|
JavaScript 前端开发 测试技术
精通Selenium:从基础到高级的网页自动化测试策略
【10月更文挑战第6天】随着Web应用变得越来越复杂,手动进行功能和兼容性测试变得既耗时又容易出错。自动化测试因此成为了现代软件开发不可或缺的一部分。Selenium是一个强大的工具集,它支持多种编程语言(包括Python),允许开发者编写脚本来模拟用户与Web页面的交互。本文将带领读者从Selenium的基础知识出发,逐步深入到高级的应用场景,通过丰富的代码示例来展示如何高效地进行网页自动化测试。
236 5
|
1月前
|
Web App开发 IDE 测试技术
自动化测试的利器:Selenium 框架深度解析
【10月更文挑战第2天】在软件开发的海洋中,自动化测试犹如一艘救生艇,让质量保证的过程更加高效与精准。本文将深入探索Selenium这一强大的自动化测试框架,从其架构到实际应用,带领读者领略自动化测试的魅力和力量。通过直观的示例和清晰的步骤,我们将一起学习如何利用Selenium来提升软件测试的效率和覆盖率。
|
13天前
|
Web App开发 设计模式 JavaScript
自动化测试之美:如何利用Selenium实现Web应用的高效测试
【10月更文挑战第29天】在软件开发的世界中,测试是确保产品质量的关键步骤。本文将带你了解如何使用Selenium这一强大的自动化测试工具,提高Web应用测试的效率和准确性。通过实际案例,我们将探索Selenium的核心功能及其在现代软件开发中的应用,旨在帮助读者掌握自动化测试的精髓,从而提升软件测试工作的整体效能。
10 0
|
1月前
|
测试技术 数据安全/隐私保护 开发者
自动化测试的奥秘:如何用Selenium和Python提升软件质量
【9月更文挑战第35天】在软件开发的海洋中,自动化测试是那艘能引领我们穿越波涛的帆船。本文将揭开自动化测试的神秘面纱,以Selenium和Python为工具,展示如何构建一个简单而强大的自动化测试框架。我们将从基础出发,逐步深入到高级应用,让读者能够理解并实现自动化测试脚本,从而提升软件的质量与可靠性。
|
2月前
|
数据采集 Web App开发 测试技术
使用Selenium与WebDriver实现跨浏览器自动化数据抓取
在网络爬虫领域,Selenium与WebDriver是实现跨浏览器自动化数据抓取的利器。本文详细介绍了如何利用Selenium和WebDriver结合代理IP技术提升数据抓取的稳定性和效率。通过设置user-agent和cookie来模拟真实用户行为,避免被网站检测和阻止。文章提供了具体的代码示例,展示了如何配置代理IP、设置user-agent和cookie,并实现了跨浏览器的数据抓取。合理的参数配置能有效减少爬虫被封禁的风险,提高数据抓取效率。
285 6
使用Selenium与WebDriver实现跨浏览器自动化数据抓取
|
2月前
|
Web App开发 存储 安全
Python编写脚本,打开浏览器输入网址,自动化登陆网站
Python编写脚本,打开浏览器输入网址,自动化登陆网站
74 4
|
1月前
|
Web App开发 Java 测试技术
一、自动化:web自动化。Selenium 入门指南:从安装到实践
一、自动化:web自动化。Selenium 入门指南:从安装到实践
38 0
|
2月前
|
Web App开发 JavaScript Java
自动化测试的利剑:Selenium WebDriver入门与实践
【9月更文挑战第21天】在软件开发的海洋中,自动化测试犹如一艘船,帮助开发者们快速航行至质量保证的彼岸。本文将作为你的罗盘,指引你了解和掌握Selenium WebDriver这一强大的自动化测试工具。通过深入浅出的方式,我们将探索Selenium WebDriver的基本概念、安装过程以及编写简单测试脚本的方法。无论你是刚接触自动化测试的新手,还是希望提升测试技能的开发者,这篇文章都将为你提供有价值的指导。