最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何用Python實現(xiàn)自動發(fā)送微博

 更新時間:2022年01月23日 14:16:02   作者:簡說Python  
大家好,本篇文章主要講的是如何用Python實現(xiàn)自動發(fā)送微博,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏

一、軟件準備

1.安裝Python 環(huán)境

首先需要你的電腦安裝好了Python環(huán)境,并且安裝好了Python開發(fā)工具。如果你還沒有安裝,可以參考以下文章:如果僅用Python來處理數(shù)據(jù)、爬蟲、數(shù)據(jù)分析或者自動化腳本、機器學習等,建議使用Python基礎環(huán)境+jupyter即可,安裝使用參考??Windows/Mac 安裝、使用Python環(huán)境+jupyter notebook??

2.安裝selenium庫

pip install selenium

3.下載谷歌瀏覽器驅動chromedriver,下載地址:http://npm.taobao.org/mirrors/chromedriver/需要選擇對應的谷歌瀏覽器版本,(谷歌瀏覽器訪問:chrome://settings/help,即可查看版本)

如何用 Python 自動發(fā)送微博?_python

下載好后,隨便發(fā)到一個路徑下即可(簡單點最好,記住路徑)。

二、實現(xiàn)方法

2.1 使用 Selenium 工具自動化模擬瀏覽器,當前重點是了解對元素的定位

我們想定位一個元素,可以通過 id、name、class、tag、鏈接上的全部文本、鏈接上的部分文本、XPath 或者 CSS 進行定位,在 Selenium Webdriver 中也提供了這 8 種方法方便我們定位元素。

1)通過 id 定位:我們可以使用 find_element_by_id() 函數(shù)。比如我們想定位 id=loginName 的元素,就可以使用browser.find_element_by_id(“loginName”)。

2)通過 name 定位:我們可以使用 find_element_by_name() 函數(shù),比如我們想要對 name=key_word 的元素進行定位,就可以使用 browser.find_element_by_name(“key_word”)。

3)通過 class 定位:可以使用 find_element_by_class_name() 函數(shù)。

4)通過 tag 定位:使用 find_element_by_tag_name() 函數(shù)。

5)通過 link 上的完整文本定位:使用 find_element_by_link_text() 函數(shù)。

6)通過 link 上的部分文本定位:使用 find_element_by_partial_link_text() 函數(shù)。有時候超鏈接上的文本很長,我們通過查找部分文本內容就可以定位。

7)通過 XPath 定位:使用 find_element_by_xpath() 函數(shù)。使用 XPath 定位的通用性比較好,因為當 id、name、class 為多個,或者元素沒有這些屬性值的時候,XPath 定位可以幫我們完成任務。

8)通過 CSS 定位:使用 find_element_by_css_selector() 函數(shù)。CSS 定位也是常用的定位方法,相比于 XPath 來說更簡潔。

2.2 對元素進行的操作包括

1)清空輸入框的內容:使用 clear() 函數(shù);

2)在輸入框中輸入內容:使用 send_keys(content) 函數(shù)傳入要輸入的文本;

3)點擊按鈕:使用 click() 函數(shù),如果元素是個按鈕或者鏈接的時候,可以點擊操作;

4)提交表單:使用 submit() 函數(shù),元素對象為一個表單的時候,可以提交表單;

2.3 注意

由于selenium打開的chrome是原始設置的,所以訪問微博首頁時一定會彈出來是否提示消息的彈窗,導致不能定位到輸入框??墒褂萌缦路椒P閉彈窗:

prefs = {"profile.default_content_setting_values.notifications": 2}

2.4 如何定位元素

點擊需要定位的元素,然后右鍵選擇檢查,可以調出谷歌開發(fā)者工具。

如何用 Python 自動發(fā)送微博?_python_02

獲取xpath 路徑,點擊谷歌開發(fā)者工具左上角的小鍵頭(選擇元素),選擇自己要查看的地方的,開發(fā)者工具就會自動定位到對應元素的源碼位置,選中對應源碼,然后右鍵,選擇??Copy??-> ??Copy XPath??即可獲取到xpath 路徑。

如何用 Python 自動發(fā)送微博?_python_03

另外: 可以下載 XPath Helper插件,安裝后 在網(wǎng)頁上選取想要提取的元素, 點擊右鍵 選中 檢查 然后 開發(fā)者工具自動打開 你可以看到 HTML代碼 ,選中然后再次點擊右鍵,選中copy 里的 copy to xpath這樣就得到了xpath的值了。

三、完整代碼

實現(xiàn)思路: 其實和平時我們正常操作一樣,只不過這里,全程由selenium來實現(xiàn),模擬點擊和輸入,所以整個過程為:打開登錄頁面->輸入賬號密碼->點擊登錄按鈕->在發(fā)微博框輸入發(fā)送內容->點擊發(fā)送按鈕->關閉瀏覽器(自選)。

3.1 目前自動輸入賬號可能會彈出登錄保護需掃二維碼驗證

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
import time


'''
自動發(fā)布微博
content:發(fā)送內容
username:微博賬號
password:微博密碼
'''
def post_weibo(content, username, password):
    # 加載谷歌瀏覽器驅動
    path = r'C:/MyEnv/chromedriver.exe '  # 指定驅動存放目錄
    ser = Service(path)
    chrome_options = webdriver.ChromeOptions()
    # 把允許提示這個彈窗關閉
    prefs = {"profile.default_content_setting_values.notifications": 2}
    chrome_options.add_experimental_option("prefs", prefs)
    driver = webdriver.Chrome(service=ser, options=chrome_options)
    driver.maximize_window()  # 設置頁面最大化,避免元素被隱藏  
    
    print('# get打開微博主頁')
    url = 'http://weibo.com/login.php'
    driver.get(url)  # get打開微博主頁
    time.sleep(5)  # 頁面加載完全
    
    print('找到用戶名 密碼輸入框')
    input_account = driver.find_element_by_id('loginname')  # 找到用戶名輸入框
    input_psw = driver.find_element_by_css_selector('input[type="password"]')  # 找到密碼輸入框
    # 輸入用戶名和密碼
    input_account.send_keys(username)
    input_psw.send_keys(password)
    
    print('# 找到登錄按鈕 //div[@node-type="normal_form"]//div[@]/a')
    bt_logoin = driver.find_element_by_xpath('//div[@node-type="normal_form"]//div[@]/a')  # 找到登錄按鈕
    bt_logoin.click()  # 點擊登錄
    # 等待頁面加載完畢  #有的可能需要登錄保護,需掃碼確認下
    time.sleep(40)

    # 登錄后 默認到首頁,有微博發(fā)送框
    print('# 找到文本輸入框 輸入內容 //*[@id="homeWrap"]/div[1]/div/div[1]/div/textarea')
    weibo_content = driver.find_element_by_xpath('//*[@id="homeWrap"]/div[1]/div/div[1]/div/textarea')
    weibo_content.send_keys(content)
    print('# 點擊發(fā)送按鈕 //*[@id="homeWrap"]/div[1]/div/div[4]/div/button')
    bt_push = driver.find_element_by_xpath('//*[@id="homeWrap"]/div[1]/div/div[4]/div/button')
    bt_push.click()  # 點擊發(fā)布
    time.sleep(15)
    
    driver.close()  # 關閉瀏覽器

if __name__ == '__main__':
    username = '微博用戶名'
    password = "微博密碼"
    # 自動發(fā)微博
    content = '每天進步一點'
    post_weibo(content, username, password)

如何用 Python 自動發(fā)送微博?_selenium_04

通過cookie進行登錄可跳過掃碼登錄,cookie過期后重新獲取下cookie就可以了。

導入第三方包

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
import time
import requests
import json

獲取cookie到本地

這里主要利用了selenium的get_cookies函數(shù)獲取cookies。

# 獲取cookies 到本地
def get_cookies(driver):
    driver.get('https://weibo.com/login.php')
    time.sleep(20) # 留時間進行掃碼
    Cookies = driver.get_cookies() # 獲取list的cookies
    jsCookies = json.dumps(Cookies) # 轉換成字符串保存
    with open('cookies.txt', 'w') as f:
        f.write(jsCookies)
    print('cookies已重新寫入!')
    

# 讀取本地的cookies
def read_cookies():
    with open('cookies.txt', 'r', encoding='utf8') as f:
        Cookies = json.loads(f.read())
    cookies = []
    for cookie in Cookies:
        cookie_dict = {
            'domain': '.weibo.com',
            'name': cookie.get('name'),
            'value': cookie.get('value'),
            'expires': '',
            'path': '/',
            'httpOnly': False,
            'HostOnly': False,
            'Secure': False
        }
        cookies.append(cookie_dict)
    return cookies

利用cookie登錄微博并發(fā)送文字 完整代碼

# 初始化瀏覽器 打開微博登錄頁面
def init_browser():
    path = r'C:/MyEnv/chromedriver.exe '  # 指定驅動存放目錄
    ser = Service(path)
    chrome_options = webdriver.ChromeOptions()
    # 把允許提示這個彈窗關閉
    prefs = {"profile.default_content_setting_values.notifications": 2}
    chrome_options.add_experimental_option("prefs", prefs)
    driver = webdriver.Chrome(service=ser, options=chrome_options)
    driver.maximize_window()    
    driver.get('https://weibo.com/login.php')
    return driver
    
    
# 讀取cookies 登錄微博
def login_weibo(driver):
    cookies = read_cookies()
    for cookie in cookies:
        driver.add_cookie(cookie)
    time.sleep(3)
    driver.refresh()  # 刷新網(wǎng)頁

# 發(fā)布微博
def post_weibo(content, driver):
    time.sleep(5)
    weibo_content = driver.find_element_by_xpath('//*[ @id ="homeWrap"]/div[1]/div/div[1]/div/textarea')
    weibo_content.send_keys(content)
    bt_push = driver.find_element_by_xpath('//*[@id="homeWrap"]/div[1]/div/div[4]/div/button')
    bt_push.click()  # 點擊發(fā)布
    time.sleep(5)
    driver.close()  # 關閉瀏覽器

    
if __name__ == '__main__':
    # cookie登錄微博
    driver = init_browser()
    login_weibo(driver)
    # 自動發(fā)微博
    content = '今天的天氣真不錯~'
    post_weibo(content, driver)

如何用 Python 自動發(fā)送微博?_python_05

拓展:檢測cookies有效性

檢測方法:利用本地cookies向微博發(fā)送get請求,如果返回的頁面源碼中包含自己的微博昵稱,就說明cookies還有效,否則無效。

如何用 Python 自動發(fā)送微博?_自動化實戰(zhàn)_06

# 檢測cookies的有效性
def check_cookies():
    # 讀取本地cookies
    cookies = read_cookies()
    s = requests.Session()
    for cookie in cookies:
        s.cookies.set(cookie['name'], cookie['value'])
    response = s.get("https://weibo.com")
    html_t = response.text
    # 檢測頁面是否包含我的微博用戶名
    if '老表max' in html_t:
        return True
    else:
        return False

拓展:定時每日自動發(fā)送

from apscheduler.schedulers.blocking import BlockingSchedulera

'''
每天早上9:00 發(fā)送一條微博
'''
def every_day_nine():
    # cookie登錄微博
    driver = init_browser()
    login_weibo(driver)
    req = requests.get('https://hitokoto.open.beeapi.cn/random')
    get_sentence = req.json()
    content =  f'【每日一言】{get_sentence["data"]} 來自:一言api'
    # 自動發(fā)微博
    post_weibo(content, driver)
    

    
# 選擇BlockingScheduler調度器
sched = BlockingScheduler(timezone='Asia/Shanghai')

# job_every_nine 每天早上9點運行一次  日常發(fā)送
sched.add_job(every_day_nine, 'cron', hour=9)

# 啟動定時任務
sched.start()

總結

到此這篇關于如何用Python實現(xiàn)自動發(fā)送微博的文章就介紹到這了,更多相關Python發(fā)送微博內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Jupyter Notebook添加代碼自動補全功能的實現(xiàn)

    Jupyter Notebook添加代碼自動補全功能的實現(xiàn)

    這篇文章主要介紹了Jupyter Notebook添加代碼自動補全功能的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01
  • Python深度學習pytorch神經(jīng)網(wǎng)絡填充和步幅的理解

    Python深度學習pytorch神經(jīng)網(wǎng)絡填充和步幅的理解

    這篇文章主要介紹了Python深度學習pytorch神經(jīng)網(wǎng)絡填充和步幅的理解
    2021-10-10
  • Python torch.flatten()函數(shù)案例詳解

    Python torch.flatten()函數(shù)案例詳解

    這篇文章主要介紹了Python torch.flatten()函數(shù)案例詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-08-08
  • 基于Python開發(fā)一個文件快速搜索工具

    基于Python開發(fā)一個文件快速搜索工具

    這篇文章主要為大家詳細介紹了如何基于Python開發(fā)一個文件快速搜索工具,可以實現(xiàn)多條件文件搜索并實時搜索狀態(tài)反饋,需要的可以參考一下
    2025-03-03
  • 解決Tensorflow 使用時cpu編譯不支持警告的問題

    解決Tensorflow 使用時cpu編譯不支持警告的問題

    今天小編就為大家分享一篇解決Tensorflow 使用時cpu編譯不支持警告的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • Django中使用celery完成異步任務的示例代碼

    Django中使用celery完成異步任務的示例代碼

    本篇文章主要介紹了Django中使用celery完成異步任務的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • Python 如何實現(xiàn)文件自動去重

    Python 如何實現(xiàn)文件自動去重

    這篇文章主要介紹了Python 實現(xiàn)文件自動去重操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • python常見的格式化輸出小結

    python常見的格式化輸出小結

    今天在寫代碼的時候,需要統(tǒng)一化輸出格式進行,一時想不起竟具體細節(jié),用了最笨的方法,所以覺得有必要將常見的方法進行一個總結。下面這篇文中就給大家總結了python中常見的格式化輸出,比如打印字符串、打印整數(shù)和打印浮點數(shù)等,下面來看看詳細的輸出方法吧。
    2016-12-12
  • Python?flask使用ajax上傳文件的示例代碼

    Python?flask使用ajax上傳文件的示例代碼

    這篇文章主要介紹了Python?flask使用ajax上傳文件,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • 關于pyqt5彈出提示框的詳細介紹

    關于pyqt5彈出提示框的詳細介紹

    在實際的程序開發(fā)中經(jīng)常會用到各種各樣的消息框來給用戶一些提示或提醒,下面這篇文章主要給大家介紹了關于pyqt5彈出提示框的詳細介紹,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-08-08

最新評論

东乡族自治县| 甘孜县| 枝江市| 广德县| 永嘉县| 吉林市| 安丘市| 阳原县| 岑巩县| 长沙市| 突泉县| 汾西县| 台中市| 山东省| 吴忠市| 金坛市| 元阳县| 鄂托克前旗| 临沂市| 丹凤县| 丹棱县| 民和| 深圳市| 都兰县| 顺义区| 宁都县| 自治县| 武定县| 焦作市| 临湘市| 上林县| 贵港市| 耿马| 常熟市| 临湘市| 河源市| 随州市| 阿荣旗| 乌拉特中旗| 湛江市| 兴文县|