python selenium 自動(dòng)發(fā)微博,評(píng)論等

第一次使用selenium,對(duì)于很多方法理解也不是很完善,如有建議,咱評(píng)論區(qū)指正。

一、編程環(huán)境

編寫語(yǔ)言:python
瀏覽器:chrome(這邊Firefox也可以)

二、微博自動(dòng)登錄

因?yàn)槲沂怯梦⒉┙壎耸謾C(jī),因此每次登陸都需要發(fā)送手機(jī)驗(yàn)證碼,然后驗(yàn)證。
這就讓自動(dòng)登錄這一塊顯得十分困難。
因此,借鑒網(wǎng)上其他人的方法,發(fā)現(xiàn)可以通過(guò)保存cookies的方式,形成自動(dòng)登錄,不過(guò)經(jīng)過(guò)測(cè)試,cookies的有效期限最長(zhǎng)只有1天的時(shí)間,一天之后,就要重新刷新cookies了。
這也是我這個(gè)方法的一個(gè)缺點(diǎn)。

下面講一下思路
首先,經(jīng)過(guò)人工的操作,保存登陸微博后的cookies,這邊如果想要自己輸入賬號(hào)密碼,直接把中間幾行注釋掉就醒了,我自己是直接定義了userpassword。
然后中間sleep了60秒,用于輸入驗(yàn)證碼。

 # 保存cookies的文件
       def get_cookies(self,test_url):
          try:
              file = 'cookies.json'
              # 打開(kāi)需要獲取cookies的網(wǎng)站
              driver.implicitly_wait(5)
              driver.get(test_url)
              driver.maximize_window()
              # 網(wǎng)站打開(kāi)后,在時(shí)間內(nèi)手動(dòng)執(zhí)行登錄操作
              time.sleep(random.randint(1, 3))
              # 自動(dòng)輸入賬號(hào)密碼
              driver.find_element_by_xpath("http://input[@id='loginname']").send_keys(self.user)
              time.sleep(random.randint(1, 3))
              driver.find_element_by_xpath("http://input[@name='password']").send_keys(self.password)
              time.sleep(random.randint(1, 3))
              driver.find_element_by_xpath("http://*[@node-type='submitBtn']").click()
              time.sleep(60)
              # 登錄成功后,獲取cookies并保存為json格式
              cookies = driver.get_cookies()
              fp = open(file,'w')
              json.dump(cookies,fp)
              fp.close()
              # 關(guān)閉瀏覽器
              driver.close()

這里就是在擁有cookies之后,直接向driver傳入cookies就能實(shí)現(xiàn)自動(dòng)登錄

      # 向?yàn)g覽器添加保存的cookies
      def add_cookies(self):
          fp = open(file, 'r')
          cookies = json.load(fp)
          fp.close()
          for cookie in cookies:
               driver.add_cookie(cookie)

完整過(guò)程:

from selenium import webdriver
import json
import time
import random

class AutoLogin():
       def __init__(self):
          #自行填寫自己的微博賬號(hào)等
          self.user = '******'
          self.password = '********'

       # 保存cookies的文件
       def get_cookies(self,test_url):
          try:
              file = 'cookies.json'
              # 打開(kāi)需要獲取cookies的網(wǎng)站
              driver.implicitly_wait(5)
              driver.get(test_url)
              driver.maximize_window()
              # 網(wǎng)站打開(kāi)后,在時(shí)間內(nèi)手動(dòng)執(zhí)行登錄操作
              time.sleep(random.randint(1, 3))
              # 自動(dòng)輸入賬號(hào)密碼
              driver.find_element_by_xpath("http://input[@id='loginname']").send_keys(self.user)
              time.sleep(random.randint(1, 3))
              driver.find_element_by_xpath("http://input[@name='password']").send_keys(self.password)
              time.sleep(random.randint(1, 3))
              driver.find_element_by_xpath("http://*[@node-type='submitBtn']").click()
              time.sleep(60)
              # 登錄成功后,獲取cookies并保存為json格式
              cookies = driver.get_cookies()
              fp = open(file,'w')
              json.dump(cookies,fp)
              fp.close()
              # 關(guān)閉瀏覽器
              driver.close()

          except Exception as e:
               utils.logger2.debug('get cookies error[%s]: %s', e.__traceback__.tb_lineno, e)
               driver.close()
          time.sleep(random.randint(1, 3))

      # 向?yàn)g覽器添加保存的cookies
      def add_cookies(self):
          fp = open(file, 'r')
          cookies = json.load(fp)
          fp.close()
          for cookie in cookies:
               driver.add_cookie(cookie)


       # 打開(kāi)網(wǎng)址
       def open_url(self,url):
          driver.get(url)
          driver.implicitly_wait(5)
          driver.maximize_window()
          time.sleep(5)

if __name__ == "__main__":

     driver = webdriver.Chrome()
     test_url = 'https://weibo.com/'
     obj = AutoComment()
     # 獲取登陸cookies
     obj.get_cookies(test_url)
   
     # obj.open_url(test_url)

     # 添加cookies后刷新界面,實(shí)現(xiàn)免密登錄
     # obj.add_cookies()
     # driver.refresh()

     time.sleep(3)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容