当前位置: 首页 > news >正文

用python实现提高自己博客访问量

文章目录

  • 前言
  • 1、整体逻辑
  • 2、代码实现


前言

你还在为自己博客的访问量不高而烦恼吗?我教你如何提高访问量
我发现CSDN上,自己点击自己的博客,可以增加访问量,但是在一定时间内点击同一篇博客,访问量无法再次增加,需要等待一段时间。
通过这个切入点,我们完全可以实现一个非常简单的python小程序,来实现点击博客,提高访问量

1、整体逻辑

本次python小程序的核心就是使用selenium UI测试框架(没有安装的小伙伴需要安装)加上Chrome驱动,Chrome驱动要和Chrome版本大体一致,用其他驱动也可以,例如火狐

第一步
建立一个python项目,并在该项目中建立一个python文件,名字随便(我的叫做increaseTraffic.py),并在当前目录下建立一个文本文件(用于保存xpath,取名为xpath)

第二步:打开浏览器,点击自己博客主页,并按下fn+F12(或者直接按F12)打开开发者模式

在这里插入图片描述

把鼠标移动到自己的第一篇文章上,右击,再点击检查

在这里插入图片描述

将鼠标放到开发者模式中的高亮部分,右击,再将鼠标放到Copy上,左边就会弹出侧边框,里面有一个CopyXpath,然后点击。将这个Xpath拷贝到之前建好的xpath文件中。
再次对第二篇文章进行重复操作,比较两者的Xpath。

例如我的前两篇文章的Xpath:

//*[@id="userSkin"]/div[2]/div/div[2]/div[1]/div[2]/div/div/div[1]/article/a/div[1]/h4
//*[@id="userSkin"]/div[2]/div/div[2]/div[1]/div[2]/div/div/div[2]/article/a/div[1]/h4

仔细对比,只有/article前面的div[1]里面的数字(可以理解为id)不同,代表类似于文章的标号,假如你有50篇文章,里面的id就是1-50,利用这个特性,就不要保存大量的Xpath,使用字符串拼接即可

因此将Xpath分为两部分(id前半部分和后半部分)保存到xpath文件中,例如

在这里插入图片描述

第二步:
读取xpath文件中的内容,并放在一个列表中

def Readfile():
    with open("./xpath", 'r', encoding="UTF-8") as f:
        # 不需要读取换行符,因为要进行xpath的拼接
        filetxt = f.read().splitlines()
    return filetxt

# 将text.txt的数据读到列表中
filetxt = Readfile()
str1 = filetxt[0]
str2 = filetxt[1]

这里需要注意的是不能直接调用readlines(),因为它会读取文件中每行内容的换行,但我们不需要这个换行。

以下是读取换行和不读取换行最终拼接的Xpath的区别:

#不读取换行
//*[@id="userSkin"]/div[2]/div/div[2]/div[1]/div[2]/div/div/div[1]/article/a/div[1]/h4

#读取换行
//*[@id="userSkin"]/div[2]/div/div[2]/div[1]/div[2]/div/div/div[
1]/article/a/div[1]/h4

第三步

打开Chrome浏览器,并访问指定的url链接

driver = webdriver.Chrome()
driver.maximize_window()
driver.get("https://blog.csdn.net/qq_56044032?spm=1000.2115.3001.5343")

这里的url链接一定要填自己的,否则就是再给我刷访问量,哈哈

使用Xpath定位并点击有一个前提,右侧的滚动条要逐步向下滚动,否则有些文章可能没有加载,就会导致错误。
除此之外,点击一篇文章后需要关闭该文件,并且driver对象需要进行窗口切换,否则会将主窗口关掉
最后就是当滑动到底部,并且最后一篇文章点击并关闭后,滚动条需要回到最上方

while True:
    for i in range(1, 80):
        if(i == 36 or i == 38):
            driver.execute_script("window.scrollBy(0,143)")
            continue
        driver.find_element_by_xpath(str1 + str(i) + str2).click()
        print(str1 + str(i) + str2)
        driver.switch_to.window(driver.window_handles[1])
        time.sleep(2)
        driver.close()
        driver.switch_to.window(driver.window_handles[0])
        driver.execute_script("window.scrollBy(0,143)")
        time.sleep(2)
    driver.execute_script("var q=document.documentElement.scrollTop=0")
    time.sleep(2)

for中的range是文章数量,做闭右开区间

if(i == 36 or i == 38):
    driver.execute_script("window.scrollBy(0,143)")
    continue

这段代码的含义就是跳过除文章外的动态,因为我发了两次动态,它们的是36和38

在这里插入图片描述

它们的Xpath分别是
//[@id=“userSkin”]/div[2]/div/div[2]/div[1]/div[2]/div/div/div[36]/div/a/div[1]/div[1]/div/p
和//
[@id=“userSkin”]/div[2]/div/div[2]/div[1]/div[2]/div/div/div[38]/div/a/div[1]/div[1]/div/p

显然和文章的Xpath不同
跳过点击,但也要进行向下滚动
driver.execute_script(“window.scrollBy(0,143)”) 就是向下滑动143个像素点,保持点击的文章始终在屏幕的中间部分

driver.switch_to.window(driver.window_handles[1])
driver.switch_to.window(driver.window_handles[0])

这两句代码意为切换窗口

driver.execute_script("var q=document.documentElement.scrollTop=0")

这句代码意味,当全部文章都已经点击完毕,需要滑动到最上面,再开始下一轮的点击

2、代码实现

import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchElementException
from selenium.common.exceptions import NoAlertPresentException



def Readfile():
    with open("./xpath", 'r', encoding="UTF-8") as f:
        # 不需要读取换行符,因为要进行xpath的拼接
        filetxt = f.read().splitlines()
    return filetxt

# 将text.txt的数据读到列表中
filetxt = Readfile()
str1 = filetxt[0]
str2 = filetxt[1]


# 打开Chrome浏览器,访问指定的url
driver = webdriver.Chrome()
# Chrome浏览器窗口最大化
driver.maximize_window()
# 到达url链接
driver.get("https://blog.csdn.net/qq_56044032?spm=1000.2115.3001.5343")
time.sleep(3)

while True:
    for i in range(1, 80):
        if(i == 36 or i == 38):
            driver.execute_script("window.scrollBy(0,143)")
            continue
        # 拼接文章的Xpath
        driver.find_element_by_xpath(str1 + str(i) + str2).click()
        print(str1 + str(i) + str2)
        # 进行子窗口切换,以至于不是关闭的主窗口
        driver.switch_to.window(driver.window_handles[1])
        time.sleep(2)
        # 关闭子窗口
        driver.close()
        # 切换主窗口
        driver.switch_to.window(driver.window_handles[0])
        # 向下滑动
        driver.execute_script("window.scrollBy(0,143)")
        time.sleep(2)
    # 回到顶部
    driver.execute_script("var q=document.documentElement.scrollTop=0")
    time.sleep(2)

driver.quit()

相关文章:

  • 第十三届蓝桥杯C++B组省赛 I 题——李白打酒加强版 (AC)
  • 常见的probe set和gallery set究竟是什么
  • 【微机接口】中断系统:中断的应用
  • Spring MVC入口Servlet原理简介说明(HttpServletBean,FrameworkServlet,DispatcherServlet)
  • 【附源码】Python计算机毕业设计社区卫生预约挂号系统
  • 【C++】顺序表,链表,栈的练习(千万要会做)每日小细节007
  • k8s编程operator——client-go基础部分
  • MySQL纯代码复习
  • 零基础入门学习Web开发:HTML篇(一)
  • 【云原生】docker 搭建ElasticSearch7
  • ubuntu安装openresty
  • 前端爱心代码跟个风
  • 【数据结构】C语言实现顺序栈 OJ题 —— 有效的括号
  • Hive笔记
  • 趣味益智小游戏 三子棋+五子棋 优化版(可任意选择棋盘大小)
  • 2017前端实习生面试总结
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • avalon2.2的VM生成过程
  • Docker下部署自己的LNMP工作环境
  • exports和module.exports
  • Java 23种设计模式 之单例模式 7种实现方式
  • JavaScript函数式编程(一)
  • Java小白进阶笔记(3)-初级面向对象
  • Nodejs和JavaWeb协助开发
  • Python中eval与exec的使用及区别
  • Redis 懒删除(lazy free)简史
  • Vue组件定义
  • yii2权限控制rbac之rule详细讲解
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 番外篇1:在Windows环境下安装JDK
  • 给github项目添加CI badge
  • 基于Vue2全家桶的移动端AppDEMO实现
  • 简单基于spring的redis配置(单机和集群模式)
  • 七牛云假注销小指南
  • 前端工程化(Gulp、Webpack)-webpack
  • 区块链分支循环
  • 为视图添加丝滑的水波纹
  • 智能合约开发环境搭建及Hello World合约
  • HanLP分词命名实体提取详解
  • ​HTTP与HTTPS:网络通信的安全卫士
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • (17)Hive ——MR任务的map与reduce个数由什么决定?
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (WSI分类)WSI分类文献小综述 2024
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • (学习日记)2024.02.29:UCOSIII第二节
  • (转)GCC在C语言中内嵌汇编 asm __volatile__
  • (转)总结使用Unity 3D优化游戏运行性能的经验
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • (转载)从 Java 代码到 Java 堆
  • .net Application的目录
  • [1127]图形打印 sdutOJ
  • [Asp.net MVC]Asp.net MVC5系列——Razor语法