Why? 写博客的时候每次使用图片都得先上传到新浪微博,然后在得到链接插入到markdown中。这样操作多来几次就受不了,于是就使用python+selenium自动上传博客图片。
第一步 安装环境 Python3python3百度云 selenium
1 2 //打开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标签哦): 得到上传照片按钮的XPath 得到普通上传的XPath 得到选择图片的Xpath 以下省略1000字……
第三步 撸代码调试 代码如下(简单易懂吧):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 import osfrom selenium import webdriverimport timeclass 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) : 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() 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() 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); fw = open("E:\python\pySinaAutoUpload\imgsUrl.txt" , "w" ) 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 // 得到图片路径
1 2 3 4 5 6 7 8 @Echo Off&Setlocal Enabledelayedexpansion Del /q E:\python\pySinaAutoUpload\imgsPath.txtFor /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) For /f "tokens=*" %%i in (imgsPath.txt) do (Ren "%%~ dpni_New%%~ xi" "%%~ nxi") exit
upload.bat //运行py
1 2 cd E:\python\pySinaAutoUpload\python uploadImgs.py
好了,到此告一段落了,等有时间补上使用py模拟登陆的解决方案
参考:http://blog.csdn.net/justheretobe/article/details/50939021
希望这篇文章能给你带来知识和乐趣,喜欢博主的文章可以加博主好友哦
有好的文章也可以向博主投稿哦