鱼C论坛

 找回密码
 立即注册
查看: 2528|回复: 0

[作品展示] 通过selenium实现贴吧自动顶贴

[复制链接]
发表于 2020-8-6 09:47:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 孟婆汤 于 2020-8-6 09:49 编辑
  1. # coding=utf-8

  2. import requests as rs
  3. import re
  4. from selenium import webdriver
  5. from urllib import parse
  6. import time
  7. from selenium.webdriver.common.keys import Keys


  8. class baidu:
  9.     def __init__(self, name, num):
  10.         self.index_url=''
  11.         self.headers = {
  12.             'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KH'\
  13.                           'TML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'
  14.         }
  15.         self.name = name
  16.         self.index_num = num
  17.         self.wd = webdriver.Chrome(executable_path='chromedriver')
  18.         # 设置 浏览器最大化
  19.         self.wd.maximize_window()
  20.         self.wd.implicitly_wait(10)

  21.     def run(self):
  22.         # 合并 各种网址
  23.         self.combine_url()
  24.         # 获取 帖子地址
  25.         self.get_index_url_list()
  26.         # 百度登录
  27.         self.login_baidu()
  28.         # 开始顶贴
  29.         self.up_title()


  30.     def combine_url(self):
  31.             temp_url = 'https://tieba.baidu.com/f?'
  32.             self.index_url = temp_url + parse.urlencode({'kw' : self.name})+'&ie=utf-8&pn=0'
  33.             self.title_basic_href = 'https://tieba.baidu.com/p/'
  34.             self.title_href_list = []

  35.     def get_index_url_list(self):
  36.         for i in range(self.index_num):
  37.             self.index_url = self.index_url[:-1]+f'{i*50}'
  38.             con = rs.get(url=self.index_url,headers=self.headers).content.decode('utf-8')
  39.             href_list = re.findall('回复">.*?</span>[\s\S]*?href="/p/(.*?)"\stitle',con)
  40.             self.title_href_list.append(href_list)

  41.     def login_baidu(self):

  42.         url = 'https://passport.baidu.com/v2/?login'
  43.         self.wd.get(url=url)
  44.         self.wd.find_element_by_id('TANGRAM__PSP_3__footerULoginBtn').click()
  45.         time.sleep(0.1)

  46.         # 输入 账号
  47.         self.wd.find_element_by_id('TANGRAM__PSP_3__userName').send_keys('贴吧账号')
  48.         # 输入 密码
  49.         self.wd.find_element_by_id('TANGRAM__PSP_3__password').send_keys('贴吧密码')
  50.         # 去除 下次登录
  51.         self.wd.find_element_by_id('TANGRAM__PSP_3__memberPass').click()
  52.         time.sleep(0.1)
  53.         # 登录
  54.         self.wd.find_element_by_id('TANGRAM__PSP_3__submit').click()

  55.         while True:
  56.             # 判断 是否跳转,如果为否,则判断是否存在弹出框
  57.             if url == self.wd.current_url:
  58.                 time.sleep(0.2)
  59.                 try:
  60.                     self.wd.find_element_by_id('TANGRAM__PSP_21__foreground').find_element_by_id('TANGRAM__PSP_27__jump').click()
  61.                     break
  62.                 except:
  63.                     time.sleep(0.2)
  64.                     continue
  65.             # 已经跳转,则退出
  66.             else:
  67.                 break

  68.     def up_title(self):
  69.         for i in self.title_href_list:
  70.             for j in i:
  71.                 self.wd.get(self.title_basic_href+j)
  72.                 time.sleep(0.1)
  73.                 js = 'scrollTo(0,100000)'
  74.                 self.wd.execute_script(js)
  75.                 p = self.wd.find_element_by_id('ueditor_replace').find_element_by_xpath('./p')
  76.                 p.send_keys('46846464684684')
  77.                 p.send_keys(Keys.CONTROL,Keys.ENTER)
  78.                 # 最后再加一个 判断 是否顶贴成功即可
  79.                 # 下午 再干
  80.                 # 拖了一周都没干。。。唉 拖延症

  81. def main():
  82.     bd = baidu('灌水',1)
  83.     bd.run()


  84. if __name__ == '__main__':
  85.     main()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-24 20:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表