Python+selenium自动上传博客图片至新浪微博相册

Why?

写博客的时候每次使用图片都得先上传到新浪微博,然后在得到链接插入到markdown中。这样操作多来几次就受不了,于是就使用python+selenium自动上传博客图片。


image

第一步 安装环境

Python3
python3百度云
selenium

//打开cmd运行
pip install selenium

安装chromedriver - 各版本下载地址

chromedriver版本 支持的Chrome版本
v2.35 v62-64
v2.34 v61-63
v2.33 v60-62
v2.32 v59-61
v2.31 v58-60
v2.30 v58-60
v2.29 v56-58
v2.28 v55-57
v2.27 v54-56
v2.26 v53-55
v2.25 v53-55
v2.24 v52-54
v2.23 v51-53
v2.22 v49-52
v2.21 v46-50
v2.20 v43-48
v2.19 v43-47
v2.18 v43-46
v2.17 v42-43
v2.13 v42-45
v2.15 v40-43
v2.14 v39-42
v2.13 v38-41
v2.12 v36-40
v2.11 v36-40
v2.10 v33-36
v2.9 v31-34
v2.8 v30-33
v2.7 v30-33
v2.6 v29-32
v2.5 v29-32
v2.4 v29-32

第二步 获取XPath

首先打开登录页面,得到需要的账号、密码、登录的XPath(按F12打开开发者工具)
得到账号的XPath如下图(其他同理,注意是input标签哦):


image

得到上传照片按钮的XPath


image

得到普通上传的XPath
image

得到选择图片的Xpath
image

以下省略1000字......

第三步 撸代码调试

代码如下(简单易懂吧):

import os
from selenium import webdriver
import time
class Connect():
    def __init__(self):
        self.UserName = '你的账号'
        self.PassWord = '你的密码'
        # 微相册的登录地址
        self.URL = 'https://weibo.com/login.php?url=http://photo.weibo.com/5673857615/albums'
    def upload(self):
        # chromedriver的安装地址(默认)
        self.driver = webdriver.Chrome('C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe')
        # 最大化浏览器窗口
        self.driver.maximize_window()
        self.driver.get(self.URL)
        # 输入账号
        self.driver.find_element_by_xpath('//*[@id="loginname"]').send_keys(self.UserName)
        # 输入密码
        self.driver.find_element_by_xpath('//*[@id="pl_login_form"]/div/div[3]/div[2]/div/input').send_keys(self.PassWord)
        # 点击登录(我这里忽略需要验证码的情况 可以用打码平台解决,或手动输入)
        self.driver.find_element_by_xpath('//*[@id="pl_login_form"]/div/div[3]/div[6]/a').click()
        # 等待3秒
        time.sleep(3)
        # 点击上传照片
        self.driver.find_element_by_xpath('//*[@id="user_info"]/div/a').click()
        time.sleep(3)
        # 点击普通上传
        self.driver.find_element_by_xpath('//*[@id="flash_upload"]/p/a').click()
        # 打开需要记录上传的图片地址的txt
        fr = open("E:\python\pySinaAutoUpload\imgsPath.txt", "r")
        content = fr.readlines() 
        # 循环上传图片
        for index,val in enumerate(content):
            imgPath = val.strip()  #去掉每行头尾空白  
            time.sleep(3)
            i = index + 1
            if i == 1:
              self.driver.find_element_by_xpath('//*[@id="common_upload"]/ul/li/form/input').send_keys(imgPath)
              time.sleep(3)
              self.driver.find_element_by_xpath('//*[@id="common_upload"]/ul/li/form/a').click()
            else:
              self.driver.find_element_by_xpath('//*[@id="common_upload"]/ul/li[' + str(i) + ']/form/input').send_keys(imgPath)
              time.sleep(3)
              self.driver.find_element_by_xpath('//*[@id="common_upload"]/ul/li[' + str(i) + ']/form/a').click()
        # 关闭文件
        fr.close()  
        time.sleep(3)
        # 点击下一步
        self.driver.find_element_by_xpath('//*[@id="common_upload"]/div/a').click()
        time.sleep(3)
        # 点击保存并发布
        self.driver.find_element_by_xpath('//*[@id="uploadPanel"]/div[2]/div[4]/a').click()
        time.sleep(3)
        # 得到上传文件的个数
        count = len(content);
        # 打开记录上传图片的URL的txt
        fw = open("E:\python\pySinaAutoUpload\imgsUrl.txt", "w")
        # 循环得到图片Url
        for j in range(count):
          imgsUrl = self.driver.execute_script('return document.getElementsByClassName("m_photoItem m_photoItem_a")[' + str(j) + '].getElementsByTagName("img")[0].src')
          time.sleep(3)
          imgsUrl = imgsUrl.replace("small", "large");
          fw.write(imgsUrl + '\n')
          fw.flush()
        fw.close()
Connect().upload()

第四步 编写bat批处理文件简化操作

为什么用bat? 一开始是想直接拖到.py文件上运行的,可以改了注册表重启什么的还是不管用
getPath.bat // 得到图片路径

@Echo Off&Setlocal Enabledelayedexpansion
Del /q E:\python\pySinaAutoUpload\imgsPath.txt
For /l %%a in (1,1,9) do (Call Set "f=%%%%~a"
(If defined f Dir /a-d /b /s !f!)>>E:\python\pySinaAutoUpload\imgsPath.txt)
)
exit

upload.bat //运行py

cd E:\python\pySinaAutoUpload\
python uploadImgs.py

好了,到此告一段落了,等有时间补上使用py模拟登陆的解决方案

参考:http://blog.csdn.net/justheretobe/article/details/50939021

新建了个简书程序员交流群194472590,欢迎加入交流!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,384评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,845评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,148评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,640评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,731评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,712评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,703评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,473评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,915评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,227评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,384评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,063评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,706评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,302评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,531评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,321评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,248评论 2 352

推荐阅读更多精彩内容