用webdriver实现自动登录和自动发微博文字图片

转载自:https://www.jianshu.com/p/9d4ac1b69660

登录还需自动输入验证码

用到autoit  去百度

下面的可以自动修改成你自己的

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from time import sleep
import os

class Uploader:
    driver = webdriver.Chrome(executable_path='chromedriver.exe')  # chrome浏览器驱动

    # 根据验证框的存在与否判断是否要输入验证码
    def isVerifyCodeExist(self):
        try:  # 如果成功找到验证码输入框返回true
            self.driver.find_element_by_css_selector('input[name="verifycode"]')
            return True
        except:  # 如果异常返回false
            return False

    # 输入验证码部分,如果无需输入则直接返回,否则手动输入成功后返回        
    def inputVerifyCode(self):
        input_verifycode = self.driver.find_element_by_css_selector('input[name="verifycode"]')  # 验证码输入框
        bt_change = self.driver.find_element_by_css_selector('img[action-type="btn_change_verifycode"]')  # 验证码图片,点击切换
        bt_logoin = self.driver.find_element_by_class_name('login_btn')  # 登录按钮
        while self.isVerifyCodeExist():
            print(u'请输入验证码……(输入"c"切换验证码图片)')
            verifycode = input()
            if verifycode == 'c':
                bt_change.click()
            else:
                input_verifycode.send_keys(verifycode)
                bt_logoin.click()
                # 点击完登录以后判断是否成功
                if self.driver.current_url.split('/')[-1] == 'home':
                    print(u'登录成功')
                    break
                else:
                    print(u'输入的验证码不正确')

    # 打开微博首页进行登录的过程
    def login(self, account, password):
        self.driver.implicitly_wait(10)  # 设置隐性等待时间,等待页面加载完成才会进行下一步,最多等待10秒
        url = 'http://weibo.com/'
        self.driver.get(url)
        # 输入账号密码并登录
        WebDriverWait(self.driver, 10).until(lambda x: x.find_element_by_id('loginname')).send_keys(account)
        self.driver.find_element_by_css_selector('input[type="password"]').send_keys(password)

        bt_logoin = self.driver.find_element_by_class_name('login_btn')
        bt_logoin.click()

        # 如果存在验证码,则进入手动输入验证码过程
        if self.isVerifyCodeExist():
            self.inputVerifyCode()

    # 上传文字
    def upload_txt(self, text):
        input_w = self.driver.find_element_by_xpath('//div[@node-type="textElDiv"]/textarea[@class="W_input"]')
        input_w.send_keys(text)
        sleep(1)

    # 运行上传图片脚步
    def upload_img_script(self, time_bef, time_after, path):  # path参数需要前后带双引号
        sleep(time_bef)  # 等待弹窗时间
        os.system('C:/img/upload.exe ' + path)
        sleep(time_after)  # 等待图片加载时间

    # 上传文字和单图
    def upload_txt_img(self, text, img_path):
        self.upload_txt(text)  # 将文字上传
        img = self.driver.find_element_by_css_selector('a[action-type="multiimage"]')  # 图片按钮
        img.click()  # 点击图片按钮
        sleep(1)  # 等待加载其他按钮

        self.upload_img_script(1, 2, img_path)

    # 上传文字和多图    
    def upload_txt_multiImg(self, text, img_path_list):
        self.upload_txt_img(text, img_path_list[0])  # 将文字和第一张图片上传

        len_imgs = len(img_path_list)  # 图片地址list的长度
        bt_uploadimg = WebDriverWait(self.driver, 10).until(lambda x: x.find_element_by_xpath('//li[@node-type="uploadBtn"]/div'))
        for i in range(len_imgs - 1):  # 将剩余图片上传
            bt_uploadimg.click()
            self.upload_img_script(1, 2, img_path_list[i + 1])

    # 发布
    def send(self):
        self.driver.find_element_by_class_name('W_btn_a').click()
        sleep(4)  # 等待发送成功字样消失


# 登录
uploader = Uploader()
uploader.login("**************", "***************")  # 填写你的账号密码
count_img = 2;#自动获取图片多少张
text = "okokokokposfdfsdafsadfsadgsadfgsfgkjsfdajgkl;sajklgjsakgjsakljdgklsadjgkls;salkgjk"#填入你的内容
path_list = []  # 图片地址list

for i in range(count_img):  # 根据图片总数量生成所有图片地址
    m = i+1
    path_list.append('C:\\img\\'+str(m)+'.jpg')
# 上传内容
if count_img == 0:  # 没有图片
    uploader.upload_txt(text)
elif count_img == 1:  # 单张图片
    uploader.upload_txt_img(text, path_list[0])
else:  # 多张图片
    uploader.upload_txt_multiImg(text, path_list)

uploader.send()



再使用selenium打开chrome浏览器的时候,需要用chromedriver,而chromedriver与chrome的版本也是要相互适宜的,如果不能正常打开网站连接就是这里问题,对应关系如下:

chromedriver版本支持的Chrome版本
v2.24v52-54
v2.23v51-53
v2.22v49-52
v2.21v46-50
v2.20v43-48
v2.19v43-47
v2.18v43-46
v2.17v42-43
v2.13v42-45
v2.15v40-43
v2.14v39-42
v2.13v38-41
v2.12v36-40
v2.11v36-40
v2.10v33-36
v2.9v31-34
v2.8v30-33
v2.7v30-33
v2.6v29-32
v2.5v29-32
v2.4v29-32

附: 
所有chromedriver均可在下面链接中下载到:

http://chromedriver.storage.googleapis.com/index.html

不要在这里摔跤




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值