首页 > 其他分享 >selenium 自动化登录(京东案列)

selenium 自动化登录(京东案列)

时间:2022-10-17 13:11:23浏览次数:71  
标签:selenium cv2 案列 element find brower 京东 div block

京东这一个网站呢,适合和豆瓣有点相似的,但是呢,豆瓣应该是最近改版了,看过以前的视频都知道,豆瓣和京东,里面的滑块图片和背景图片都能在我们的网页中的src中找到但是呢,豆瓣改成了下面的鬼样子。

那我们的京东是可以在网页中找到我们滑块图片和背景图的src属性。而豆瓣呢只能通过打码平台去实现滑动,你说巧不巧,我搞不明白。。这就很尴尬。。那么我们的京东登录,是可以定位到我们的大图和小图的,所以我们就可以不借用打码平台来实现,当然,想借用打码平台也可以,只要你会。是吧!。
那么我们就直接进入正文。。

1.导入我们所需要的模块

import cv2#处理图片颜色度问题并且保存处理后的图片
import time
import numpy as np #计算滑块滑动的距离
from selenium import webdriver
from urllib import request
from selenium.webdriver.common.action_chains import ActionChains#模拟按键按下,滑动
brower = webdriver.Chrome()#创建驱动对象

2.定义一个login函数,用来登录界面

def login():
    url = "https://passport.jd.com/new/login.aspx?"
    brower.get(url)
    time.sleep(3)
    userlogin = brower.find_element(By.XPATH,'//div/div[@class="login-tab login-tab-r"]/a').click()

    # time.sleep(5)
    username = brower.find_element(By.ID,"loginname").send_keys('13249300059')
    userpswd = brower.find_element(By.ID,"nloginpwd").send_keys('yao123456')

    # time.sleep(5)
    brower.find_element(By.ID,"loginsubmit").click()
    time.sleep(3)

3.

#背景图
bigimg = brower.find_element(By.XPATH,'//div/div[@class="JDJRV-bigimg"]/img').get_attribute("src")
#滑块图
smallimg = brower.find_element(By.XPATH,'//div/div[@class="JDJRV-smallimg"]/img').get_attribute("src")
#背景图命名
backimg="backimg.png"
#滑块图命名
slideimg='slideimg.png'
#下载图片
request.urlretrieve(bigimg,backimg)
request.urlretrieve(slideimg,smallimg)

#将图片灰度化
block=cv2.imread(slideimg,0)#滑块图片
template=cv2.imread(backimg,0)#背景图片

#二值化的图片名称
blockName='block.jpg'
templateName='template.jpg'

#保存
cv2.imwrite(blockName,block)
cv2.imwrite(templateName,template)

block=cv2.imread(blockName)
block=cv2.cvColor(block,cv2.COLOR_RGB2GRAY)
block=abs(255-block)
cv2.imwrite(blockName,block)

block=cv2.imread(blockName)
template=cv2.imread(templateName)

#获取偏移量
result=cv2.matchTemplate(block,template,cv2.TM_CCOEFF_NORMED)`# 查找block在template中的位置,返回result是一个矩阵,是每个点的匹配结果`
x, y = np.unravel_index(result.argmax(), result.shape)


# 获取滑块
element = brower.find_element(By.XPATH,'//div/div[@class="JDJRV-smallimg"]/img')
ActionChains(brower).click_and_hold(on_element=element).perform()
ActionChains(brower).move_to_element_with_offset(to_element=element, xoffset=y-25, yoffset=0).perform()
ActionChains(brower).release(on_element=element).perform()
time.sleep(3)


if __name__ == '__main__':
    login()


  • 为了让程序不断重复运行直到登录成功为止,所以这里需要加一个循环。

3完整代码如下

```
import cv2
import time
import numpy as np
from selenium import webdriver
from urllib import request
from selenium.webdriver.common.action_chains import ActionChains

brower = webdriver.Chrome()


def login():
    url = "https://passport.jd.com/new/login.aspx?"
    brower.get(url)
    time.sleep(3)
    userlogin = brower.find_element(By.XPATH,'//div/div[@class="login-tab login-tab-r"]/a').click()

    # time.sleep(5)
    username = brower.find_element(By.ID,"loginname").send_keys('13249300059')
    userpswd = brower.find_element(By.ID,"nloginpwd").send_keys('yao123456')

    # time.sleep(5)
    brower.find_element(By.ID,"loginsubmit").click()
    time.sleep(3)
    while True:
        try:
            getPic()#执行滑动程序
        except:
            print("登陆成功----")
            break
    time.sleep(5)


def getPic():
    # 用于找到登录图片的大图

    # 用来找到登录图片的小滑块

    bigimg = brower.find_element(By.XPATH,'//div/div[@class="JDJRV-bigimg"]/img').get_attribute("src")#大图
    smallimg = brower.find_element(By.XPATH,'//div/div[@class="JDJRV-smallimg"]/img').get_attribute("src")#小图
    # print(smallimg + '\n')
    # print(bigimg)
    # 背景大图命名
    backimg = "backimg.png"
    # 滑块命名
    slideimg = "slideimg.png"
    # 下载背景大图保存到本地
    request.urlretrieve(bigimg, backimg)
    # 下载滑块保存到本地
    request.urlretrieve(smallimg, slideimg)
    # 获取图片并灰度化
    block = cv2.imread(slideimg, 0)
    template = cv2.imread(backimg, 0)
    # 二值化后的图片名称
    blockName = "block.jpg"
    templateName = "template.jpg"
    # 将二值化后的图片进行保存
            # 二值化的图片名称,灰度化后的图片
    cv2.imwrite(blockName,  block)
    cv2.imwrite(templateName, template)
    block = cv2.imread(blockName)
    block = cv2.cvtColor(block, cv2.COLOR_RGB2GRAY)
    block = abs(255 - block)
    cv2.imwrite(blockName, block)

    block = cv2.imread(blockName)
    template = cv2.imread(templateName)
    # 获取偏移量
    result = cv2.matchTemplate(block, template, cv2.TM_CCOEFF_NORMED)  # 查找block在template中的位置,返回result是一个矩阵,是每个点的匹配结果
    x, y = np.unravel_index(result.argmax(), result.shape)
    print("x方向的偏移", int(y * 0.4 + 18), 'x:', x, 'y:', y)
    # 获取滑块
    element = brower.find_element(By.XPATH,'//div/div[@class="JDJRV-smallimg"]/img')
    ActionChains(brower).click_and_hold(on_element=element).perform()
    ActionChains(brower).move_to_element_with_offset(to_element=element, xoffset=y-25, yoffset=0).perform()
    ActionChains(brower).release(on_element=element).perform()
    time.sleep(3)


    if __name__ == '__main__':
        login()
```

标签:selenium,cv2,案列,element,find,brower,京东,div,block
From: https://www.cnblogs.com/beilipython/p/16798857.html

相关文章

  • python+selenium+opencv验证滑块
    我们在使用selenium爬虫的时候在登录时经常会遇到滑块验证码问题,导致登录受阻,正所谓万事开头难。登录就登录不进去更别提往后的操作的。今天以登录京东后台来演示下如何破......
  • ui自动化selenium
    1:环境搭建pipinstall-i加速器镜像地址包名#使用加速器镜像地址下载安装第3方包pipinstall-ihttps://pypi.tuna.tsinghua.edu.cn/simpleselenium2:不同......
  • Playwright 和Selenium
    背景想知道如何在Playwright和Selenium之间进行选择以实现测试自动化?继续阅读以查看两种流行的测试自动化工具之间的比较。在Web测试自动化方面,Selenium多年来一......
  • 京东商品评论情感分析|语义网络分析
    1.语义网络的本质语义网络是一种社会网络分析的方法,由大量的常识与概念构成,用户借助于微博,脸书等社交媒体工具,由社交媒体工具构建联系网络,通过语义网络,识别评价主体与评论......
  • 京东商品评论情感分析|研究内容
    本文阐述多种文本挖掘分析的方法,借助不同的文本挖掘算法,挖掘京东商品评论背后潜在的、隐藏的信息。1.1研究内容本文针对小米京东自营旗舰店内的十款热销手机,运用多种文本挖......
  • selenium.common.exceptions.WebDriverException: Message: 'chromedriver' executabl
    在使用selenium模块操作浏览器时,出现下面的错误提示:selenium.common.exceptions.WebDriverException:Message:‘chromedriver’executableneedstobeinPATH.Please......
  • Python爬虫之数据提取-selenium定位获取标签对象并提取数据
    selenium提取数据知识点:了解driver对象的常用属性和方法掌握driver对象定位标签元素获取标签对象的方法掌握标签对象提取文本和属性值的方法1.driver对象的常用属性和方......
  • Python爬虫之数据提取-selenium的其它使用方法
    selenium的其它使用方法知识点:掌握selenium控制标签页的切换掌握selenium控制iframe的切换掌握利用selenium获取cookie的方法掌握手动实现页面等待掌握selenium控制浏......
  • selenium中处理验证码问题
    selenium中处理验证码问题: 验证码:基本作用:可以实现当前访问页面的数据安全性、还可以减少用户的并发数;类型:1.纯数字、纯字母2.汉字组合3.数学运算题4.滑......
  • How to run Selenium Tests in Docker
    https://www.browserstack.com/guide/run-selenium-tests-in-docker Thistutorialusesthe selenium/standalone-chrome imagehostedbyseleniumonDockerHub.S......