基于selenium实现12306的登录操作(图形验证码识别)

说明

12306 会有如下一个图形验证码识别点击,所以必须得先点击正确图片,才能继续进行操作。
在这里插入图片描述

基本步骤

  1. selenium打开对应网站,并进行截图
  2. 将图片截取出对应验证码所在图片
  3. 通过超级鹰识别出要点击的图片坐标
  4. 点击相应图片坐标
  5. 输入用户名和密码
  6. 点击登录,完成12306的登录

演示操作

在这里插入图片描述

代码

# !/user/bin/env python
# -*- coding: utf-8 -*-

from chaojiying import get_code
from selenium import webdriver
from time import sleep
from PIL import Image
from selenium.webdriver import ActionChains

if __name__ == '__main__':
    browser = webdriver.Chrome('./chromedriver.exe')

    browser.get('https://kyfw.12306.cn/otn/login/init')

    # 因为验证码图片是不固定的,所以需要对页面进行截取

    sleep(3)

    # 浏览器截图
    browser.save_screenshot('./page.png')

    # 确认验证码图片的位置
    code_img_ele = browser.find_element_by_xpath(
        '/html/body/div[6]/div/form/div/ul[2]/li[4]/div/div/div[3]/img'
    )

    print(code_img_ele)

    # 获得验证码图片的位置
    location = code_img_ele.location
    print(location)
    # 获得验证码图片的长和宽
    size = code_img_ele.size

    pos_tuple = (
        int(location['x']),
        int(location['y']),
        int(location['x'] + size['width']),
        int(location['y'] + size['height']),
    )

    # 图片裁剪
    i = Image.open('./page.png')
    frame = i.crop(pos_tuple)
    frame.save('./code.png')

    # 使用超级鹰进行验证码识别
    res = get_code('./code.png', '9004')['pic_str']
    print('图片地址', res)

    # 地址切割
    point_list = res.split('|')

    new_list = []
    for point in point_list:
        xy = point.split(',')
        temp = [int(xy[0]), int(xy[1])]
        new_list.append(temp)

    print(new_list)

    for point in new_list:
        x = point[0]
        y = point[1]
        ActionChains(browser).move_to_element_with_offset(code_img_ele, x, y).click().perform()
        sleep(0.1)

    account = {
        'username': '您自己的用户名(自行修改)',
        'password': '您自己的密码(自行修改)'
    }

    username_input = browser.find_element_by_id('username')
    password_input = browser.find_element_by_id('password')

    username_input.send_keys(account['username'])
    password_input.send_keys(account['password'])

    submit_btn = browser.find_element_by_id('loginSub')

    submit_btn.click()

    sleep(60)
    browser.quit()


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏2同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值