自动化脚本练习------论坛自动回关

目录

总体功能描述:

环境配置:

代码简述

总代码:

坑:

项目文件:


互粉多是一件美事,但手动回关,总是不够及时,显得我们没有诚意,而且,懒惰是程序猿的优秀品质,为了将这种精神发扬光大,我写了如下一篇脚本。

总体功能描述:

  • 登录后查看新关注自己的好友(打开脚本后需要手动扫码登录,暂时还没有解决csdn用chromedriver 登录时滑动验证码不通过的问题,手动滑动也会验证失败如果你知道怎么解决请务必,私信我指教一下我!!!)
  • 对新增粉丝列表中的UU进行回关:

如果是已经关注就跳过,未关注就点击回关。并且打开这位朋友的主页,给第一篇文章点一个赞,(虽然没有看文章,但是咱的人情最起码是送到了)

  • 挂在后台,持续扫描新增粉丝列表,并实时回关点赞。(关注我,我秒回,hhh,看到这里是不是想关注我试试看呢?,如果你有服务器的话,可以挂在服务器上24小时不间断的运行了)

环境配置:

  1. chrome浏览器以及chrome driver,需要版本一致。话不多说,上链接:

chrome driver下载地址:

CNPM Binaries Mirrorhttps://registry.npmmirror.com/binary.html?path=chromedriver/

建议将谷歌浏览器更新到最新版,并且下载最新的chrome driver。

2.配置charom driver环境变量:

将exe文件的地址复制,加在这理

 3,python 环境

这里就不多说了,可以自行百度

代码简述

 这里是用到的模块,灰色是因为没有破解滑动验证码,删掉了自动登录的部分。后续补充。

主要是selenium,可以定位到浏览器中的元素,并进行操作。

这部分是在新增好友界面,查看是否有新关注的好友。

这部分是进入关注自己的UU的界面,对他的文章行get like。

这里是一个等待用户扫码登录的逻辑,用户扫码后会跳出循环。

这里是登录后跳转到新增列表,并且保存相关链接,用于再次回到此界面。以及每隔20秒刷新查看有无新增关注。 

总代码:

import random

from selenium import webdriver  # 用来驱动浏览器的
from selenium.webdriver import ActionChains  # 破解滑动验证码的时候用的 可以拖动图片
from selenium.webdriver.common.by import By  # 按照什么方式查找,By.ID,By.CSS_SELECTOR
from selenium.webdriver.common.keys import Keys  # 键盘按键操作
from selenium.webdriver.support import expected_conditions as EC  # 和下面WebDriverWait一起用的
from selenium.webdriver.support.wait import WebDriverWait  # 等待页面加载某些元素

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
import time
import datetime
import sys


def care_new(num):
    # 寻找新增粉丝,默认num个
    for i in range(num - 1):
        try:
            care_button = browser.find_element(By.CSS_SELECTOR,
                                               f"ul[class='list']>li:nth-child({i + 1})>div:nth-child(3)> :nth-child(1)")
            fan = browser.find_element(By.CSS_SELECTOR,
                                       f"ul[class = 'list']>li:nth-child({i + 1})> :nth-child(2)> :nth-child(1) :nth-child(1)")
        finally:
            pass
        print("tag" + care_button.text)
        if care_button.text == "回关":
            care_button.click()
            print("你回关了" + fan.text + "  ----" + datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
            name = str(fan.text)
            # 进入关注者主页
            # fan.click()
            time.sleep(2)
            print(fan.get_attribute("href"))
            browser.get(fan.get_attribute("href"))
            time.sleep(2)
            give_like(name)
        else:
            print("你已经关注过" + fan.text + "了,无需再次关注")

    return


def give_like(name):
    # 给他一个赞 title = browser.find_element(By.XPATH, '//*[@id="userSkin"]/div[2]/div/div[2]/div/div[2]/div/div/div[
    # 1]/article/a')
    # title = browser.find_element(By.CSS_SELECTOR,
    #                            "div[class = 'mainContent']>div:nth-child(1)> :nth-child(1)> :nth-child(1) :nth-child(1) :nth-child(1)")
    print("kaisidianzan")
    try:
        title = browser.find_element(By.CSS_SELECTOR, "article > :nth-child(1)")
    except:
        print("没找到" + name + "的文章")
    else:
        time.sleep(1)
        print("href" + title.get_attribute("href"))
        browser.get(title.get_attribute("href"))
        time.sleep(1.5)
        try:
            islike = browser.find_element(By.ID, 'is-like')
            # // *[ @ id = "is-like"] / a
            time.sleep(1.5)
        except:
            print("没找到点赞按钮")
        else:
            islike.click()
            print("你点赞了" + name + "的文章")
            time.sleep(1)
        finally:
            pass
    finally:
        pass
    try:
        title = browser.find_element(By.TAG_NAME, "")
        time.sleep(1)
        print("tag2" + title.tag_name)
    except:
        print("meizhaodao")
    else:
        time.sleep(1)
        print("tag1" + title.tag_name)

    finally:
        # 回到关注列表
        browser.get(fans_link)
        time.sleep(3)
    return


if __name__ == '__main__':
    fans_link = ""
    browser = webdriver.Chrome()  # 括号中填写chromedriver驱动的路径
    browser.maximize_window()
    try:
        # 加载CSDN 登录地址
        browser.get("https://passport.csdn.net/login?code=applets")
        # 等待扫码登录
        ok = True
        while ok:
            try:
                isok = browser.find_element(By.XPATH, '//*[@id="csdn-toolbar"]/div/div/div[3]/div/div[1]/a')
            except:
                ok = False
            else:
                try:
                    # print(isok.text)
                    if isok.text == "登录/注册":
                        ok = True
                    else:
                        ok = False
                except:
                    ok = False
            time.sleep(0.5)

        time.sleep(2)
        # 登陆成功
        mess = browser.find_element(By.ID, "toolbar-remind")
        time.sleep(1)
        # 点击进入消息
        mess.click()
        # 进入新增粉丝页面
        new_fans = browser.find_element(By.XPATH, '// *[ @ id = "app"] / div / div[1] / ul / li[2] / a / span')
        fans_link = browser.find_element(By.XPATH, '// *[ @ id = "app"] / div / div[1] / ul / li[2] / a').get_attribute(
            "href")

        new_fans.click()


        time.sleep(1)
        # 查看前十个
        first = True
        care_new(8)
        while True:
            if first:
                care_new(8)
            # 20s查看一次
            browser.get(fans_link)
            time.sleep(20)

    finally:
        print("完了,报错了")

坑:

*进入新的界面后一定要尽量用get(url)的方式,这样只是在当前页面刷新,而不是新建标签页,click跳转界面后很容易出现定位不到UI元素的情况。

*预留足够的时间,进行页面加载。

项目文件:


链接:https://pan.baidu.com/s/17a07JnLZjSvsarED0lRn2A?pwd=z3x4 
提取码:z3x4

*项目使用说明:

解压文件后记得添加chormdriver 路径到 系统环境变量path

Automessage\Autocsdn\dist下的exe文件可以直接运行,如果报错请检查环境变量以及chrom浏览器版本,这是我的版本。(在chrom浏览器地址栏输入,chrome://version/ 可以显示类似下图版本信息。

欢迎各位大佬留言私信,指点不足。后续部署到服务器端,欢迎来关注验证。

  • 12
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

勇敢di牛牛

你必飞黄腾达,耶稣也拦不住。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值