admin管理员组

文章数量:1130349

前言

最近因为工作需要 用selenium做了一个QQ邮箱的爬虫(登录时部分帐号要滑动解锁),先简单记录一下。

这个问题先可以分为两个部分:1.登录帐号2.滑动解锁。python版本3.5.4

问题分析:登录+滑动解锁

其实登录账号的部分本来很简单,用selenium打开QQ邮箱官网:https://mail.qq 然后切换frame输入帐号

和密码点击登录即可,但是部分账号,或者可以说是异地登录的QQ账号需要滑动解锁验证码才能继续登录(下图)

看到这张图我们应该不难想到

  1. 我们需要模拟人拖动按钮
  2. 按钮拖动的距离=拼图间的距离

这个明确了之后那接下来我们先看看拼图间的距离到底怎么算。登录虽然不难,但还是写一下,免得说我偷懒0.0

1.1 登录

# coding = utf-8
from selenium import webdriver
import time
import random
from utils import DbUtil
import uuid
from selenium.webdriver import ActionChains
from PIL import Image as Im
import os
import cv2
import numpy as np
import requests
from pymongo import MongoClient

# 代码1.1 目前只用到webdriver和time库 其他的会在下面用到
# u 帐号,p 密码
def Email(u, p):
    # 定义QQ邮箱的登录页
    start_url = "https://mail.qq"

    # 这里我用的是火狐浏览器。很多人喜欢定义成driver 我喜欢定义成browser
    browser = webdriver.Firefox()

    # 休息2s
    time.sleep(2)

    # 使用火狐浏览器打开QQ邮箱的登录页
    browser.get(start_url)

    # 休息2s(这个sleep时间因网速而异,部分的错误就是因为网站还没打开你就开始获取网页的标签进行操作,当然就获取不到然后报错了~)
    time.sleep(2)

    # 切换frame。login_frame是该登录窗口iframe的id
    browser.switch_to.frame("login_frame")

    # 点击选择帐号密码登录
    browser.find_element_by_id("switcher_plogin").click()

    # 休息1s
    time.sleep(1)

    # 输入帐号 将u填入id是u的输入框
    browser.find_element_by_id("u").send_keys(u)
    time.sleep(1)

    # 输入密码 将p填入id是p的输入框
    browser.find_element_by_id("p").send_keys(p)
    time.sleep(1)

    # 点击登录 登录按钮的id是login_button
    browser.find_element_by_id("login_button").click()

# main方法
if __name__ == '__main__':
    # 为了实现异地登录 随意定义一个QQ号(反正我们的目的是滑动解锁0.0),如果直接提示帐号密码错误没有验证码的话就再随意编一个QQ号
    Email(u="123456789"

前言

最近因为工作需要 用selenium做了一个QQ邮箱的爬虫(登录时部分帐号要滑动解锁),先简单记录一下。

这个问题先可以分为两个部分:1.登录帐号2.滑动解锁。python版本3.5.4

问题分析:登录+滑动解锁

其实登录账号的部分本来很简单,用selenium打开QQ邮箱官网:https://mail.qq 然后切换frame输入帐号

和密码点击登录即可,但是部分账号,或者可以说是异地登录的QQ账号需要滑动解锁验证码才能继续登录(下图)

看到这张图我们应该不难想到

  1. 我们需要模拟人拖动按钮
  2. 按钮拖动的距离=拼图间的距离

这个明确了之后那接下来我们先看看拼图间的距离到底怎么算。登录虽然不难,但还是写一下,免得说我偷懒0.0

1.1 登录

# coding = utf-8
from selenium import webdriver
import time
import random
from utils import DbUtil
import uuid
from selenium.webdriver import ActionChains
from PIL import Image as Im
import os
import cv2
import numpy as np
import requests
from pymongo import MongoClient

# 代码1.1 目前只用到webdriver和time库 其他的会在下面用到
# u 帐号,p 密码
def Email(u, p):
    # 定义QQ邮箱的登录页
    start_url = "https://mail.qq"

    # 这里我用的是火狐浏览器。很多人喜欢定义成driver 我喜欢定义成browser
    browser = webdriver.Firefox()

    # 休息2s
    time.sleep(2)

    # 使用火狐浏览器打开QQ邮箱的登录页
    browser.get(start_url)

    # 休息2s(这个sleep时间因网速而异,部分的错误就是因为网站还没打开你就开始获取网页的标签进行操作,当然就获取不到然后报错了~)
    time.sleep(2)

    # 切换frame。login_frame是该登录窗口iframe的id
    browser.switch_to.frame("login_frame")

    # 点击选择帐号密码登录
    browser.find_element_by_id("switcher_plogin").click()

    # 休息1s
    time.sleep(1)

    # 输入帐号 将u填入id是u的输入框
    browser.find_element_by_id("u").send_keys(u)
    time.sleep(1)

    # 输入密码 将p填入id是p的输入框
    browser.find_element_by_id("p").send_keys(p)
    time.sleep(1)

    # 点击登录 登录按钮的id是login_button
    browser.find_element_by_id("login_button").click()

# main方法
if __name__ == '__main__':
    # 为了实现异地登录 随意定义一个QQ号(反正我们的目的是滑动解锁0.0),如果直接提示帐号密码错误没有验证码的话就再随意编一个QQ号
    Email(u="123456789"

本文标签: 解锁邮箱seleniumQQ