简介: 之前直接测试mail.q63.com 以及 mail.qq.com的selenium登录都受阻,网站采用了较强的反爬技术,如动态id等,故用规避方法登陆
1、在参考他文的基础上,做了代码重构。QQ邮箱在右上角有“基本版”登录,没有做加强反爬处理,而163的,则是通过www.163.com去找邮箱,发现接口是email.163.com,注意多了一个字母e,是较早的登录接口。
2、代码(请把你的帐号密码代替xxxx),增加了自动判断输入是否正确:
# coding:utf-8
# python 3.5.2
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import selenium.webdriver.support.ui as ui
import time
# 选择QQ还是163邮箱
email_type = input("1-QQ免费邮箱\n2-163免费邮箱\n请输入对应数字:")
def run():
global email_type
if email_type != str(1) or email_type != str(2):
print ("输入错误,请重新输入 :)")
email_type = input("1-QQ免费邮箱\n2-163免费邮箱\n请输入对应数字:")
if email_type == str(1):
url = "https://ui.ptlogin2.qq.com/cgi-bin/login?style=9&appid=522005705&daid=4&s_url=https%3A%2F%2Fw.mail.qq.com%2Fcgi-bin%2Flogin%3Fvt%3Dpassport%26vm%3Dwsk%26delegate_url%3D%26f%3Dxhtml%26target%3D&hln_css=http%3A%2F%2Fmail.qq.com%2Fzh_CN%2Fhtmledition%2Fimages%2Flogo%2Fqqmail%2Fqqmail_logo_default_200h.png&low_login=1&hln_autologin=%E8%AE%B0%E4%BD%8F%E7%99%BB%E5%BD%95%E7%8A%B6%E6%80%81&pt_no_onekey=1"
driver = webdriver.Firefox()
driver.get(url)
time.sleep(2)
driver.find_element_by_xpath("/html/body/div[1]/div[2]/div[4]/ul/li[1]/input").send_keys("xxxx")
driver.find_element_by_xpath("/html/body/div[1]/div[2]/div[4]/ul/li[2]/input").send_keys("xxxx")
driver.find_element_by_xpath("//html/body/div[1]/div[2]/div[4]/div[2]").click()
print('--------------Log In------------')
time.sleep(1)
elif email_type == str(2):
url = "http://email.163.com/"
driver = webdriver.Firefox()
driver.get(url)
time.sleep(2)
driver.find_element_by_xpath("/html/body/div[1]/div[1]/div/div[2]/div[2]/div/form/div[1]/label").send_keys("xxxx")
driver.find_element_by_xpath("/html/body/div[1]/div[1]/div/div[2]/div[2]/div/form/div[2]/label").send_keys("xxxx")
driver.find_element_by_xpath("/html/body/div[1]/div[1]/div/div[2]/div[2]/div/form/div[2]/button").click()
print('--------------Log In------------')
time.sleep(1)
run()
3、pycharm输出:
1-QQ免费邮箱
2-163免费邮箱
请输入对应数字:4
输入错误,请重新输入 :)
1-QQ免费邮箱
2-163免费邮箱
请输入对应数字:2
————–Log In————
Process finished with exit code 0
4、参考: