使用python调用浏览器实现自动转发微博

 

使用python调用浏览器实现自动转发微博

视频讲解地址:  https://www.bilibili.com/video/BV1i7411B747/

# coding = utf-8
import datetime
from time import sleep

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
# from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys

# import weibo2

def isElement(browser, xpathElement):
    try:
        browser.find_element_by_xpath(xpathElement)
        return True
    except:
        return False


if __name__ == "__main__":

    # loginName = weibo2.loginName    #登录微博的账户
    # loginPassword = weibo2.loginPassword     # 登录微博的密码
    # print(loginName,loginPassword)

    loginName = '你自己的登录账户'
    loginPassword = '密码'
    
    successful_num = 0  # 记录转发微博成功的次数
    now_time = datetime.datetime.now()

    # 登录微博
    # chrome_options = Options()
    # chrome_options.add_argument('--headless')
    # chrome_options.add_argument('--disable-gpu') # 前面三行是保证是无界面启动浏览器
    # browser = webdriver.Chrome(chrome_options=chrome_options)  # 创建一个谷歌浏览器对象
    browser = webdriver.Chrome()  # 创建一个谷歌浏览器对象
    browser.get("https://passport.weibo.cn/signin/login")  # 打开网址
    sleep(3)
    print("已经打开网址,等待3秒")
    browser.find_element_by_id('loginName').click()
    browser.find_element_by_id('loginName').send_keys(loginName)  # 点击账户输入框输入账户
    print("进行账户输入")
    browser.find_element_by_id('loginPassword').click()
    browser.find_element_by_id('loginPassword').send_keys(loginPassword)  # 点击密码输入框,输入密码
    print("进行密码输入")
    browser.find_element_by_id('loginAction').click()  # 点击登录按钮
    print("进行登录点击操作")
    sleep(0.5)

    while True:
        try:
            browser.find_element_by_xpath(
                '/html/body/div/div[1]/div[1]/div[1]/div[1]').click()  # 点击头像获取信息
            print('点击头像,获取微博数、关注数、粉丝数')
            break
        except:
            sleep(0.5)

    sleep(0.5)
    while True:
        try:
            weibo_num = browser.find_element_by_xpath(
                '/html/body/div/div[1]/div[1]/div[3]/div[1]/span[1]/i').text
            guanzhu_num = browser.find_element_by_xpath(
                '/html/body/div/div[1]/div[1]/div[3]/div[1]/span[2]/i').text
            fensi_num = browser.find_element_by_xpath(
                '/html/body/div/div[1]/div[1]/div[3]/div[1]/span[3]/i').text
            print('微博数:', weibo_num, '关注数:', guanzhu_num, '粉丝数:', fensi_num)
            break  # 跳出循环
        except:
            sleep(0.5)

    browser.find_element_by_xpath(
        '/html/body/div/div[1]/div[1]/div[1]/div[1]/i').click()  # 点击返回

    # 获取微博热搜
    browser.find_element_by_xpath(
        '/html/body/div/div[1]/div[1]/div[1]/a/aside/label/div').click()  # 点击搜索输入框
    print("点击搜索的输入框")

    while True:
        try:
            browser.find_element_by_xpath(
                '//*[@id="app"]/div[1]/div[1]/div[2]/div/div/div[8]/div').click()  # 点击微博热搜,查看所有的微博热搜
            print("点击微博热搜")
            break
        except:
            sleep(0.5)

    sleep(8)
    xpath1 = browser.find_elements_by_xpath(
        '/html/body/div/div[1]/div[1]/div/div/div/div/div/div/div/div/span[2]/span[1]')  # 获取热搜信息
        # /html/body/div/div[1]/div[1]/div[2]/div/div/div/div/div/div/div/span[2]/span[1]
        # /html/body/div/div[1]/div[1]/div[2]/div/div/div/div/div/div/div/span[2]/span[1]
    hot_text = []
    for j in xpath1:  # 需要研究使用枚举型进行循环输出,将标题信息依次打印输出
        hot_text.append(j.text)
    print(hot_text)

    # 返回可以进行搜索的界面
    browser.find_element_by_xpath(
        '//*[@id="app"]/div[1]/div[1]/div[1]/div/div/div/a').click()  # 进行点击返回操作,返回到可以点击微博热搜的界面
    # browser.find_element_by_xpath(
    #     '//*[@id="app"]/div[1]/div[1]/div[1]/div/div/div[1]').click()  # 进行点击返回操作,返回到登录后显示的界面

    # browser.find_element_by_xpath(
    #     ' //*[@id="app"]/div[1]/div[1]/div[1]/div/div/div[2]/form/input').click()  # 点击搜索的输入框

    zhuanfa_xpath_list = ['/html/body/div/div[1]/div[1]/div[3]/div/div/div[1]/div/div/footer/div[1]',
                          '/html/body/div/div[1]/div[1]/div[3]/div/div/footer/div[1]',
                          '/html/body/div/div[1]/div[1]/div[4]/div/div/div[1]/div/div/footer/div[1]',
                          '/html/body/div/div[1]/div[1]/div[4]/div/div/footer/div[1]',
                          '/html/body/div/div[1]/div[1]/div[5]/div/div/div[1]/div/div/footer/div[1]',
                          '/html/body/div/div[1]/div[1]/div[5]/div/div/footer/div[1]',
                          '/html/body/div/div[1]/div[1]/div[6]/div/div/div[1]/div/div/footer/div[1]',
                          '/html/body/div/div[1]/div[1]/div[6]/div/div/footer/div[1]']

    # 开始针对每一个热搜话题,进行搜索
    for every_hot in hot_text:
        browser.find_element_by_xpath(
            '/html/body/div/div[1]/div[1]/div[1]/div/div/div[2]/form/input').clear()  # 清空进行搜索的输入框
        browser.find_element_by_xpath(
            '/html/body/div/div[1]/div[1]/div[1]/div/div/div[2]/form/input').send_keys(every_hot)  # 输入搜索的内容
        browser.find_element_by_xpath(
            '/html/body/div/div[1]/div[1]/div[1]/div/div/div[2]/form/input').send_keys(Keys.ENTER)  # 模拟键盘回车进行搜索
        sleep(5)
        for i in range(len(zhuanfa_xpath_list)):  # 完成进行转发的功能
            try:
                browser.find_element_by_xpath(
                    zhuanfa_xpath_list[i]).click()  # 点击第一篇文章的转发
                sleep(3)
                browser.find_element_by_xpath(
                    '//*[@id="app"]/div[1]/div/header/div[3]/a').click()  # 点击第一篇文章的发送
                sleep(2)

                isXpathElement = u'/html/body/div/div[2]/div[1]/div[2]/footer/div/a'
                truenFalse = isElement(browser, isXpathElement)  # 调用方法
                if truenFalse is False:
                    successful_num += 1
                    print(every_hot+'\t第' + str(i+1) + '次转发成功')
                    sleep(3)
                else : # 执行过程中出现弹窗等意外情况,转发失败
                    print('执行过程中出现弹窗等意外情况,转发失败')
                    break
            except:
                if isElement(browser,'/html/body/div/div[2]/div[1]/div[2]/header/h3') is True :
                    print('转发失败,点击确定按钮,并返回')
                    browser.find_element_by_xpath('/html/body/div/div[2]/div[1]/div[2]/footer/div/a').click()    # 点击确定按钮
                    browser.find_element_by_xpath('/html/body/div/div[1]/div/header/div[1]/i').click()     # 点击返回按钮
                    break
                # print(every_hot+'\t第' + str(i+1) + '次转发失败')
                # pinglun_neirong = '欢迎关注我,看实时热点,,现在我们关注:  ' + every_hot
                # browser.find_element_by_xpath(
                #     '/html/body/div/div[1]/div/main/div[1]/div/span/textarea[1]').send_keys(pinglun_neirong)

    sleep(5)
    browser.find_element_by_xpath(
        '/html/body/div/div[1]/div[1]/div[1]/div/div/div[1]/i').click()  # 点击进行返回

    while True:
        try:
            browser.find_element_by_xpath(
                '/html/body/div/div[1]/div[1]/div[1]/div[1]').click()  # 点击头像获取信息
            print('点击头像,获取微博数、关注数、粉丝数')
            break
        except:
            sleep(1)

    while True:
        try:
            weibo_num2 = browser.find_element_by_xpath(
                '/html/body/div/div[1]/div[1]/div[3]/div[1]/span[1]/i').text
            guanzhu_num2 = browser.find_element_by_xpath(
                '/html/body/div/div[1]/div[1]/div[3]/div[1]/span[2]/i').text
            fensi_num2 = browser.find_element_by_xpath(
                '/html/body/div/div[1]/div[1]/div[3]/div[1]/span[3]/i').text
            print('微博数:', weibo_num, '关注数:', guanzhu_num, '粉丝数:', fensi_num)
            break  # 跳出循环
        except:
            sleep(1)

    print("转发任务完成")
    print('开始时间', now_time)
    print('结束时间', datetime.datetime.now())
    print('这次共转发微博' + str(successful_num) + '次')
    print('执行转发任务前    微博数:', weibo_num, '关注数:', guanzhu_num, '粉丝数:', fensi_num)
    print('执行转发任务后    微博数:', weibo_num2, '关注数:',
          guanzhu_num2, '粉丝数:', fensi_num2)

    sleep(100)
    browser.quit()  # 关闭所有窗口

 

 

 

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值