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 Java 测试技术
《手把手教你》系列技巧篇(七十一)-java+ selenium自动化测试-自定义类解决元素同步问题(详解教程)
【6月更文挑战第12天】本文介绍了如何创建一个自定义类库来解决自动化测试中的元素同步问题。作者指出,大部分错误源于元素因时间不同步而引发,为此提供了一种解决方案。在项目实践中,首先在`library`包下创建名为`MyWait`的类,包含一个方法`isElementPresent`,该方法通过循环尝试并等待指定元素出现,避免了直接使用时间等待可能导致的不准确性。之后,在测试类中调用此自定义方法,成功实现了元素同步。代码示例展示了如何在Java+Selenium自动化测试中应用这个自定义类。
26 2
|
2天前
|
XML Web App开发 Java
《手把手教你》系列技巧篇(七十)-java+ selenium自动化测试-Java中如何读取properties配置文件内容(详解教程)
【6月更文挑战第11天】本文介绍了Java自动化测试中读取properties配置文件的方法。文章首先说明了为何要将配置参数放在properties文件中,然后简述了properties文件的作用和常用的读取方式,包括通过`java.util.Properties`类和`java.util.ResourceBundle`类。接着详细列举了`Properties`类的主要方法,如`getProperty()`、`load()`、`setProperty()`和`store()`等。
12 1
|
3天前
|
存储 Java 测试技术
《手把手教你》系列技巧篇(六十九)-java+ selenium自动化测试 - 读取csv文件(详细教程)
【6月更文挑战第10天】本文介绍了如何在Java中读取CSV文件。首先解释了CSV是逗号分隔值的文本文件,常用于数据交换。接着,在项目实战部分,详细说明了如何通过下载并引入opencsv库来读取CSV文件:包括下载jar包、添加到Eclipse项目、创建CSV文件、编写Java代码读取文件内容,并展示了代码执行后的输出结果。文章以一个简单的代码示例展示了如何使用opencsv读取CSV文件中的数据。
9 0
|
4天前
|
数据采集 Web App开发 前端开发
Selenium:自动化Web浏览器操作的强大工具
**Selenium** 是一款用于自动化Web应用测试和模拟用户行为的工具,支持多种浏览器和编程语言。安装包括安装Selenium库和对应浏览器的WebDriver。基本用法包括导入库、启动浏览器、查找与操作页面元素、等待元素加载及关闭浏览器。在实际项目中,Selenium常用于Web测试、爬虫、自动化表单填写等,优点是跨平台、模拟真实用户行为,但性能较低且依赖浏览器。
24 9
|
4天前
|
Java 测试技术 Apache
《手把手教你》系列技巧篇(六十八)-java+ selenium自动化测试 - 读写excel文件 - 下篇(详细教程)
【6月更文挑战第9天】本文介绍了如何使用Java处理Excel文件中的不同数据类型,包括日期、数字、布尔值和标签(常规字符串)。文章提供了两个示例,分别使用JXL库和Apache POI库来读取Excel文件。
9 1
|
5天前
|
XML Java 测试技术
《手把手教你》系列技巧篇(六十七)-java+ selenium自动化测试 - 读写excel文件 - 中篇(详细教程)
【6月更文挑战第8天】本文介绍了Java中操作Excel的工具,包括POI和JXL。POI支持处理Office 2003及以下的OLE2格式(.xls)和2007以上的OOXML格式(.xlsx)。而JXL只能处理2003版本的Excel文件。文章详细讲解了如何下载和使用JXL库,并给出了一个简单的Java代码示例,展示如何读取2003版Excel文件中的数据。在实际项目中,由于JXL对新版本Excel的支持限制,通常推荐使用POI。
19 5
|
6天前
|
Java 测试技术 Apache
《手把手教你》系列技巧篇(六十六)-java+ selenium自动化测试 - 读写excel文件 - 上篇(详细教程)
【6月更文挑战第7天】本文介绍了在Java自动化测试中如何操作Excel数据。文章提到了当测试数据存储在Excel文件时,可以使用Apache的POI库来读写Excel。POI提供了对OLE2(.xls)和OOXML(.xlsx)格式的支持,比JXL库功能更全面。文章还详细讲解了如何下载和添加POI库到项目中,以及准备测试用的Excel文件。最后,给出了一个简单的Java代码示例,演示如何读取Excel文件的内容。
13 1
|
7天前
|
前端开发
selenium自动化详解
selenium自动化详解
|
7天前
|
测试技术 Python
《手把手教你》系列技巧篇(六十五)-java+ selenium自动化测试 - cookie -下篇(详细教程)
【6月更文挑战第6天】本文介绍了如何使用WebDriver进行浏览器cookie的操作。
18 4
|
8天前
|
Java 测试技术 数据安全/隐私保护
《手把手教你》系列技巧篇(六十四)-java+ selenium自动化测试 - cookie -中篇(详细教程)
【6月更文挑战第5天】本文介绍了如何使用Fiddler抓取HTTPS请求并利用Cookie实现自动登录的自动化实践。
24 0