admin管理员组文章数量:1130349
前言
最近因为工作需要 用selenium做了一个QQ邮箱的爬虫(登录时部分帐号要滑动解锁),先简单记录一下。
这个问题先可以分为两个部分:1.登录帐号和2.滑动解锁。python版本3.5.4
问题分析:登录+滑动解锁
其实登录账号的部分本来很简单,用selenium打开QQ邮箱官网:https://mail.qq 然后切换frame输入帐号
和密码点击登录即可,但是部分账号,或者可以说是异地登录的QQ账号需要滑动解锁验证码才能继续登录(下图)
看到这张图我们应该不难想到:
- 我们需要模拟人拖动按钮
- 按钮拖动的距离=拼图间的距离
这个明确了之后那接下来我们先看看拼图间的距离到底怎么算。登录虽然不难,但还是写一下,免得说我偷懒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账号需要滑动解锁验证码才能继续登录(下图)
看到这张图我们应该不难想到:
- 我们需要模拟人拖动按钮
- 按钮拖动的距离=拼图间的距离
这个明确了之后那接下来我们先看看拼图间的距离到底怎么算。登录虽然不难,但还是写一下,免得说我偷懒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邮箱(附带滑动解锁) 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://it.en369.cn/jiaocheng/1763771006a2962033.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。


发表评论