[Python] 纯文本查看 复制代码#! /usr/bin/env python

# -*- coding: utf-8 -*-

import requests

from selenium import webdriver

from lxml import etree

from PIL import Image

import time

import re

import os

import sys

import json

import threading

import random

from io import BytesIO

from config import *

def login(user, username, passwd, url = 'https://tieba.baidu.com/index.html'):

option = webdriver.ChromeOptions()

option.add_argument('--no-sandbox')

option.add_argument('--disable-extensions')

option.add_argument('--headless')

option.add_argument('lang=zh_CN.UTF-8')

option.add_argument('--disable-gpu')

option.add_argument('--disable-dev-shm-usage')

driver = webdriver.Chrome(executable_path='chromedriver', options=option)

driver.get(url)

time.sleep(0.16)

print('正在登录:%s...' % user)

driver.find_element_by_xpath('//*[@id="com_userbar"]/ul/li[4]/div/a').click() # 点击登录按钮

time.sleep(1)

driver.find_element_by_xpath('//*[@id="TANGRAM__PSP_10__footerULoginBtn"]').click() # 点击用户名登录

driver.find_element_by_xpath('//*[@id="TANGRAM__PSP_10__userName"]').send_keys(username) # 帐号

driver.find_element_by_xpath('//*[@id="TANGRAM__PSP_10__password"]').send_keys(passwd) # 帐号

driver.find_element_by_xpath('//*[@id="TANGRAM__PSP_10__submit"]').click() # 点击登录按钮

time.sleep(2.5)

try:

driver.find_element_by_xpath('//*[@id="TANGRAM__25__content_select_uname"]').click()

verification = 1 # 单二代验证

except:

print('尝试验证码 + 二代验证中...')

try:

element = driver.find_element_by_id('TANGRAM__PSP_10__verifyCodeImg')

verification = 2 # 验证码+二代验证

except:

print('可能不需要验证码验证')

if verification == 1:

time.sleep(1)

mode = input('需要二代验证,输入验证方式的序号\n1.手机验证\n2.密保邮箱验证\n请输入验证方式:')

driver.find_element_by_xpath('//*[@id="TANGRAM__25__select_email"]').click()

driver.find_element_by_xpath('//*[@id="TANGRAM__25__button_send_email"]').click()

vcode = input('请输入验证码:')

driver.find_element_by_xpath('//*[@id="TANGRAM__25__input_vcode"]').send_keys(vcode)

driver.find_element_by_xpath('//*[@id="TANGRAM__25__button_submit"]').click()

time.sleep(2.5)

cookies = driver.get_cookies()

elif verification == 2:

driver.save_screenshot("/tmp/codingpy.png")

time.sleep(3)

size = driver.find_element_by_id('TANGRAM__PSP_10__verifyCodeImg').size

left = int(element.location['x'])

top = int(element.location['y'])

right = int(element.location['x'] + element.size['width'])

bottom = int(element.location['y'] + element.size['height'])

im = Image.open('/tmp/codingpy.png')

im = im.crop((left, top, right, bottom))

im.save('code.png')

ucode = input('请打开code.png查看验证码\n验证码:')

driver.find_element_by_xpath('//*[@id="TANGRAM__PSP_10__verifyCode"]').send_keys(ucode) # 输入验证码

driver.find_element_by_xpath('//*[@id="TANGRAM__PSP_10__submit"]').click() # 点击登录按钮

time.sleep(3)

driver.find_element_by_xpath('//*[@id="TANGRAM__25__content_select_uname"]').click()

time.sleep(1)

mode = input('需要二代验证,输入验证方式的序号\n1.手机验证\n2.密保邮箱验证\n请输入验证方式:')

driver.find_element_by_xpath('//*[@id="TANGRAM__25__select_email"]').click()

driver.find_element_by_xpath('//*[@id="TANGRAM__25__button_send_email"]').click()

vcode = input('请输入验证码:')

driver.find_element_by_xpath('//*[@id="TANGRAM__25__input_vcode"]').send_keys(vcode)

driver.find_element_by_xpath('//*[@id="TANGRAM__25__button_submit"]').click()

time.sleep(2.5)

cookies = driver.get_cookies()

else:

print('未知错误!')

os.system("pkill chrome*")

sys.exit(0)

print('登录成功!')

os.system("pkill chrome*")

return cookies

def gettbs(cookies, tieba):

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.75 Safari/537.36'}

r = requests.get('http://tieba.baidu.com/f?kw=%s' % tieba, headers = headers, cookies = cookies)

tbslist = re.findall("'tbs':'(.+?)'", r.text)

tbstr = "".join(tbslist)

return tbstr

def getbar(cookies):

url = 'http://tieba.baidu.com/f/like/mylike?pn='

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.75 Safari/537.36'}

r_bar = requests.get(url + '1', headers = headers, cookies = cookies)

webpage = etree.HTML(r_bar.text)

pages = ['1']

pns = webpage.xpath('//*[@id="j_pagebar"]/div/a') # 判断页数

for pn in pns:

if pn.text.isnumeric():

pages.append(pn.text)

tiebas = []

for pageid in pages:

r_bar_1 = requests.get(url + pageid, headers = headers, cookies = cookies)

webpage = etree.HTML(r_bar_1.text)

tag_a = webpage.xpath('//a[@title]') # 获取贴吧

for a in tag_a:

if a.text:

tiebas.append(a.text)

return tiebas

def recognize_captcha(remote_url, rec_times):

headers = {

'user-agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.75 Safari/537.36"

}

for index in range(rec_times):

# 请求

while True:

try:

response = requests.request("GET", remote_url, headers=headers, timeout=6)

if response.text:

break

else:

print("retry, response.text is empty")

except Exception as ee:

print(ee)

# 识别

url = "http://1i1.tw:10086/b"

files = {'image_file': ('captcha.jpg', BytesIO(response.content), 'application')}

r = requests.post(url=url, files=files)

# 识别结果

predict_text = json.loads(r.text)["value"]

return predict_text

def sign_vcode(tieba, tbs, captcha_input_str, captcha_vcode_str, cookies, headers):

data = {

'ie':'utf-8',

'kw':tieba,

'tbs':tbs,

'captcha_input_str':captcha_input_str,

'captcha_vcode_str':captcha_vcode_str

}

r = requests.post('http://tieba.baidu.com/sign/add', headers = headers, data = data, cookies = cookies)

try:

resp = r.json()

if resp['data']['errmsg'] == 'success':

print('贴吧:%s\t' % tieba, end = '')

print('状态:打码签到成功!')

except:

resp = r.json()

print('贴吧:%s\t' % tieba, end = '')

print('状态:%s' % resp['error'])

def sign(cookies, tieba):

tbs = gettbs(cookies, tieba)

headers = {

'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8',

'Origin':'http://tieba.baidu.com',

'Referer':'http://tieba.baidu.com',

'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.75 Safari/537.36',

}

"""

data = {

'ie':'utf-8',

'tbs':tbs, # 一键签到 只能签到规定数量的贴吧

}

"""

data = {

'ie':'utf-8',

'kw':tieba,

'tbs':tbs # 分开签到

}

r = requests.post('http://tieba.baidu.com/sign/add', headers = headers, data = data, cookies = cookies)

try:

resp = r.json()

if resp['data']['errmsg'] == 'success':

print('贴吧:%s\t' % tieba, end = '')

print('状态:签到成功!')

except:

resp = r.json()

if resp['error'] == 'need vcode': # 需要验证码

captcha_vcode_str = resp['data']['captcha_vcode_str']

captcha_url = 'https://tieba.baidu.com/cgi-bin/genimg?%s' % captcha_vcode_str

captcha_input_str = recognize_captcha(captcha_url, 1)

sign_vcode(tieba,tbs,captcha_input_str,captcha_vcode_str,cookies,headers)

else:

print('贴吧:%s\t' % tieba, end = '') # 黑名单或者别的情况

print('状态:%s' % resp['error'])

def login_cookies(user, username, passwd):

cookie = login(user, username, passwd)

for item in cookie:

s.cookies.set(item['name'],item['value'])

cookies = requests.utils.dict_from_cookiejar(s.cookies)

with open('.%s' % user,'w') as fp:

json.dump(cookies,fp)

fp.close()

tiebas = getbar(cookies)

list.extend(tiebas)

threads=[]

for i in range(len(tiebas)): # 多少个贴吧就分配多少个线程

t=threading.Thread(target=sign,args=(cookies, tiebas[0+i]))

threads.append(t)

for i in threads:

i.start()

for i in threads:

i.join()

s.cookies.clear()

os.system("pkill chrome*")

def main():

for x in range(len(users)):

user = users[x]

username = accounts[user]['username']

passwd = accounts[user]['password']

if os.path.exists('.%s' % user):

with open('.%s' % user,'r') as fp1:

load_cookies = json.load(fp1)

cookies = requests.utils.cookiejar_from_dict(load_cookies)

print('正在使用Cookies登录:%s...' % user)

r = requests.get('http://tieba.baidu.com/sysmsg/query/userunread', cookies = cookies)

resp = r.json()

if resp['errmsg'] == '成功':

tiebas = getbar(cookies)

list.extend(tiebas)

threads=[]

for i in range(len(tiebas)):

t=threading.Thread(target=sign,args=(cookies, tiebas[0+i]))

threads.append(t)

for i in threads:

i.start()

for i in threads:

i.join()

os.system("pkill chrome*")

else:

print('%sCookies失效...正在重新登录...' % user)

login_cookies(user, username, passwd)

else:

login_cookies(user, username, passwd)

if __name__ == '__main__':

list = []

s = requests.session()

start = time.time()

main()

end = time.time()

print('总共签到{}个贴吧,耗时:{}秒'.format(len(list), int(end - start)))

python模拟登录百度贴吧_Python百度贴吧多线程自动登录签到/自动打码相关推荐

  1. python 模拟用户点击浏览器_python 模拟点击浏览器

    原标题:python 模拟点击浏览器 from selenium import webdriver #导入selenium的webdriver包,导入webdriver包后才能使用 webdriver ...

  2. python模拟一个简单的取款机_Python模拟自动存取款机的查询、存取款、修改密码等操作...

    1.工作流程 2.模拟自动存取款机的操作 代码如下: import msvcrt, sys, os #定义用星号隐藏密码输入的函数 def psw_input(): li = [] while Tru ...

  3. python 模拟键盘输入组合键_Python 模拟键盘输入

    Python 模拟键盘输入,留着备用. #coding=utf-8 import win32gui,win32api,win32con import time import threading def ...

  4. python模拟浏览器上传文件_Python模拟浏览器上传文件脚本的方法(Multipart/form-data格式)...

    http协议本身的原始方法不支持multipart/form-data请求,这个请求由原始方法演变而来的. multipart/form-data的基础方法是post,也就是说是由post方法来组合实 ...

  5. python百度翻译包_python百度翻译移动端

    百度翻译返回997错误,经过分析查询网络其他博客的示例,解决方法:如何计算sign import requests import execjs import json class MobileBaid ...

  6. python抓取百度地图数据_Python 百度地图爬虫 - 搜索数据采集

    class Hot_City_Coordinates(): """获取热门城市""" def __init__(self): self.he ...

  7. python api调用百度ai平台_Python 百度AI接口调用

    接口调用准备 1.进入网站: https://console.bce.baidu.com/?_=1535519624081&fromai=1#/aip/overview 2.选择产品服务里的文 ...

  8. python 模拟用户点击浏览器_python爬虫之selenium模拟浏览器

    1.前言 之前在异步加载(AJAX)网页爬虫的时候提到过,爬取这种ajax技术的网页有两种办法:一种就是通过浏览器审查元素找到包含所需信息网页的真实地址,另一种就是通过selenium模拟浏览器的方法 ...

  9. python模拟密码有效性检测功能_Python模拟登陆 —— 征服验证码 3 CSDN-阿里云开发者社区...

    CSDN使用了spring的webflow 这个隐藏参数可以理解成每个需要登录的用户都有一个流水号.只有有了webflow发放的有效的流水号,用户才可以说明是已经进入了webflow流程.否则,没有流 ...

  10. python 模拟用户点击浏览器_python模拟一个浏览器

    知道如何快速在命令行或者python脚本中实例化一个浏览器通常是非常有用的. 每次我需要做任何关于web的自动任务时,我都使用这段python代码去模拟一个浏览器. 1 2 3 4 5 6 7 8 9 ...

最新文章

  1. 读书笔记《鸟哥的Linux私房菜-基础学习篇》man page 查询数据后数字的意思
  2. Java多线程之CAS缺点
  3. 【C language】typedef的使用:结构体、基本数据类型、数组
  4. 调整标志位方法oracle,面试题(二)(示例代码)
  5. RISC-V踩坑记----__builtin_clz((x)库函数的应用
  6. Origin绘制带误差棒的曲线(Error Band)
  7. oracle 11g空表不能exp导出问题解决方案
  8. python控制键盘事件、粘贴_python调用键盘控制游戏事件
  9. XML 处理利器 : XStream
  10. 学计算机编程有什么用,编程是什么 学习编程的好处
  11. nssa和stub_OSPF的特殊区域--stub及totally-stub及nssa及totally-nssa详解
  12. cpuid limit_Max CPUID Valut Limit 请懂电脑的解答下 谢谢!
  13. matlab2014simulink中的三相晶闸管整流桥怎么找_哈尔滨有源滤波组件HPD2000-100-4L坏了怎么办 - 哈尔滨照明工业...
  14. 倍福--两台TwinCAT3之间做Ethernet IP通信
  15. JS-正则表达式匹配获取
  16. linux显卡检测 mats,显卡检测工具Mats下载
  17. windows中electron用ibm_db模块调用db2数据库
  18. 2022最新知识付费变现小程序+卡密独立版
  19. 双线机房、多线机房、BGP机房的关系和对比
  20. 触控板手势增强软件multitouch for mac

热门文章

  1. 删除下拉框只找23火星软件_下拉框软件找28火星下拉
  2. PSCAD中的频变参数线路模型(Frequency-Dependent (Phase) Line Model)
  3. 用户旅程图进阶:实操与模板
  4. 2001年广西壮族自治区植被类型分布数据
  5. 解决 Intel Extreme Tuning Utility(XtuService)的日志占用过大(直接删Logs或卸载)
  6. 推导飞机飞行动力学方程组
  7. cad文件如何转pdf图纸进行标准的打印
  8. 微软模拟飞行10厦门航空涂装_《微软飞行模拟》或很快迎来技术公测
  9. c和python 入门_C语言和Python,该从哪个入门编程?
  10. sendto函数深入理解