四個月前寫的一個小功能,跑通了,沒有正式使用。《用Python打造一款簡信助手--簡@(V0.1)》。只是完成了能發送站內消息(簡信)-- 提交表單的功能,主要有一個參數獲取時比較麻煩,不能從一個用戶的主頁中直接獲取到發送消息時對方的id,當時是手動獲取這個值。昨天完善一下,試用OK。
需要的參數 /chats/7094551/chat_messages
,chats后面的整數,就是發送對方的id。而這個id在設計時并不是打開對話頁面的id: mail_to,如:
http://www.lxweimin.com/chats/new?mail_to=2899894
這個id是通過訪問mail_to頁面(消息對話頁面)表單中的一個值。而mail_to頁面的url獲取,在用戶主頁下,有一個“寫簡信”的標簽可以取到。
簡單說,也就是要從用戶ID能獲取到簡信ID。而這個過程需要經過發送兩個請求,經過兩個頁面,解析不同頁面數據,來獲得這個參數??偨Y一下流程:
1)訪問用戶主頁獲取寫簡信chat/new?mail_to=xxx
的url;
2)訪問chat/new?mail_to=xxx
對話頁面,從頁面表單中action=
中解析獲取發送到對方的id;
3)構造發送簡信表單數據,發送。
獲得chats/id/messsages
代碼:
def getPostId(url):
html = getHtml(url)
soup = BeautifulSoup(html, 'html.parser', from_encoding='utf-8')
links = soup.find_all('a')
# 登錄狀態 Cookie登錄
# 從用戶主頁 解析出來簡信對話的url : http://www.lxweimin.com/chats/new?mail_to=3258479
posturl='http://www.lxweimin.com'+links[37]['href']
# 登錄狀態 Cookie登錄
# 打開簡信對話url, 解析出發送簡信的ID, 即獲得 action="/chats/7094014/chat_messages" 中的數字
html = getHtml(posturl)
soup = BeautifulSoup(html, 'html.parser', from_encoding='utf-8')
links = soup.find_all('form')
us = links[0]['action'].split('/')
return us[2]
注意以上的頁面請求,都是要在登錄狀態下發出,不然獲取不到相應值,造成第二次請求錯誤。登錄仍然使用Cookie方式。
PS:
簡書 @IT·互聯網專題 用戶關注量從4個月前的8萬多,到上周已突破26萬。
專題新增一個編委 **創業人張涵 **,居然是一位95后的創業者。歡迎勾搭。
圖片發自簡書App