python 自動回覆論壇
阿新 • • 發佈:2019-02-20
本篇文章中使用到的庫有selenium,requests,bs4等Python庫。原理就是利用selenium元素查詢進行填寫內容和點選滑鼠等操作,結合bs4獲取頁面連結。每個小時限制回覆20次,手動回覆也挺快的,技術交流。程式碼有待改進,初衷是不用是用selenium,直接傳送相應的資料,但是不會,只好動用selenium,關於selenium自行百度。本文共三個檔案。雖然使用了selenium開啟瀏覽器進行操作,整個程式碼還是可以後臺執行。
1、login.py
#coding=utf-8 from selenium import webdriver import time def login(driver,url): driver.get(url) time.sleep(1) #driver.maximize_window() # 瀏覽器全屏顯示 try: # 通過使用者名稱密碼登陸 driver.find_element_by_id("ls_username").send_keys("***********")#替換自己的賬號 driver.find_element_by_id("ls_password").send_keys("**********")#替換自己的密碼 # 勾選儲存密碼 driver.find_element_by_id("ls_cookietime").click() time.sleep(1) # 點選登陸按鈕 driver.find_element_by_css_selector('.pn.vm').click() time.sleep(1) except: print('登入失敗!!!') exit() #上述網站指定元素找不到,即登入失敗,則退出程式
2、repl.py
import time import random def reply(driver,url): reply_words = ['每天都來中國高清論壇看看有什麼電影!', '感謝樓主分享精彩電影!', '樓主分享的高清電影太好了!', '中國高清論壇很棒!', '既然你誠信誠意的推薦了,那我就勉為其難的看看吧!', '感謝樓主的無私分享!'] driver.get(url) # 開啟網址 time.sleep(1) try: driver.find_element_by_id('fastpostmessage').send_keys(reply_words[random.randint(0,5)]) driver.find_element_by_id('fastpostsubmit').click() time.sleep(15) except: pass#回覆失敗則跳過本輪操作
3、主檔案demo.py
#-*- encoding:utf-8 -*- import requests from bs4 import BeautifulSoup from selenium import webdriver import os import login import reply import time import random #獲取各種電影連線 def get_urls(url): wb_data = requests.get(url) urls = [] if wb_data.ok: soup = BeautifulSoup(wb_data.text, 'html.parser') temp_urls = soup.select('.new a') for temp_url in temp_urls: if temp_url['href'][-4:] == 'html': urls.append(temp_url['href']) return urls head_urls = ['http://www.87lou.com/forum-57-{}.html'.format(str(i)) for i in range(10)] login_url = "http://www.87lou.com/" chromedriver = "D:/Program Files/Anaconda3/chromedriver"#設定外掛的路勁 os.environ["webdriver.chrome.driver"] = chromedriver# driver = webdriver.Chrome(chromedriver) #模擬開啟瀏覽器 login.login(driver,login_url)#登入頁面 reply_times = 0#網站每個小時限制回覆20次 for head_url in head_urls: urls = get_urls(head_url)#獲取所有電影連結 for url in urls: reply.reply(driver,url)#回覆每一個電影 reply_times += 1 if reply_times % 20 == 0: time.sleep(random.randint(3600,3655))#一小時回覆20次 driver.quit()