IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> Python+selenium轻松实现博客刷量 -> 正文阅读

[开发测试]Python+selenium轻松实现博客刷量

前言

本篇文章主要讲述通过python+ selenium实现对博客的刷量来提高自己文章的知名度!!
作为Python初学者,本文章纯属学习+娱乐!!!

一、刷取博客浏览量的姿势

1.通过requests模块刷取

优点: 速度快,每天可以刷1W或者10W +
缺点: 需要不断寻找代理IP,容易被封!
****** 目前代理IP,很难找到,即便是有也不会太稳定!!

2.通过selenium模块刷取

优点: 不需要代理IP,不会出现封号
缺点: 速度很慢,一天也就几百个
****** 但是贵在持之以恒,不间断运行,极少成多!!

二、selenium刷博客的原理

1.刷取的原理

  • 经过不断研究发现,从文章主界面点击一篇博客进入,然后在关闭,返回文章主界面,浏览量+1
  • 但是当你马上再次点击进入后,在返回,浏览量不会增加。除非你间隔一段时间,再次点击进入,再次返回,浏览量才会再次+1
  • 时间间隔大概是50秒,也就是说,第一次点击以后,要等大概50秒以后,才能点击第二次,增加浏览量,正是基于这种原因导致不能多刷

2.代码实现的思路

  • 用户只需要提供文章界面的主链接
  • 通过文章的主链接获取里面所有博客数量
  • 从第一篇文章开始点击,进入后文章后,等待1秒,立刻关闭
  • 关闭第一篇文章以后,马上打开第二篇文章,等待1秒,关闭
  • 以此类推,直到最后一篇文章
  • 最后一篇文章关闭以后,在返回第一篇,重新开始
  • 如此反复循环实现刷取你所有博客的浏览量

三、代码实现

1.正常模式下代码实现

from selenium import webdriver
import time

class CSDN_shuake(object):
    def __init__(self, url):
        # 创建浏览器
        self.driver = webdriver.Chrome()
        self.url = url
        # 打开博客地址
        self.driver.get(url)
        # 窗口最大化
        self.driver.maximize_window()
        # 记录当前是刷的第几篇博客
        self.number_content = 0
        # 获取到当前主地址下文章的总数
        self.lists = self.driver.find_elements_by_xpath('//*[@id="articleMeList-blog"]/div[2]/div')
   
    # 寻找文章,默认从第0个开始点击
    def update_content(self, index=0):
        print('输出当前点击的文章索引index=', index)
        # 定位到列表
        lists = self.driver.find_elements_by_xpath('//*[@id="articleMeList-blog"]/div[2]/div')
        # 通过给定的index,取出对应的文章
        list_item = lists[index]
        list_title = list_item.find_element_by_xpath('./h4/a')
        # 滚动到指定元素
        js4 = "arguments[0].scrollIntoView();"
        self.driver.execute_script(js4, list_title)
        # 等待1,然后点击
        self.driver.execute_script("arguments[0].click();", list_title)
        # 切换标签
        self.changeBiaoQian()
        
    # 切换标签
    def changeBiaoQian(self):
        # 获取所有句柄
        handles = self.driver.window_handles
        # 切换句柄
        self.driver.switch_to.window(handles[1])
        # 当前界面的标题输出
        print(self.driver.title)
        # 休眠2秒
        time.sleep(2)
        # 关闭当前打开的界面
        self.driver.close()
        try:
	        # 无限循环
	        while True:
	            # 回到最开始的标签
	            self.driver.switch_to.window(handles[0])
	            # 刷新一次
	            self.driver.refresh()
	            # 等待2秒
	            time.sleep(2)
	            self.number_content += 1
	            if self.number_content == len(self.lists):
	                self.number_content = 0
	            # 再次重新打开
	            self.update_content(self.number_content)
        except Exception as result:
	        print("有异常结束", result)
	        self.driver.quit()
    
    # 程序运行
    def run(self):
        self.update_content()

# 运行入口        
if __name__ == '__main__':
	# 地址只需要换成自己的即可
    csdn = CSDN_shuake('https://blog.csdn.net/wds326598')
    csdn.run()
	     

至此,你可以直接运行,就会看到效果!!!
但是,这样你也就是玩玩,并不能实现一天24小时刷量!!!
要想真正24小时不停的刷,还得放到自己服务器上(阿里云服务器买个最低配的,几十元,1年)

2. Liunx服务器安装无头模式Chrome

具体安装参考: https://blog.csdn.net/frank_good/article/details/103028069

再次需要注意一点,在安装chromedriver的时候,需要注意版本chrome的版本必须与chromedriver的版本匹配,选择liunx,要不然会报错的

3.可以在liunx运行的部署的代码

# coding:utf-8
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
import time
from selenium.webdriver import Chrome
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
import os
# chromedriver的路径,根据自己的路径写
DRIVER_PATH = '/usr/local/bin/chromedriver'

class CSDN_shuake(object):
    def __init__(self, url):
        options = Options()
        options.add_argument('--no-sandbox')
        options.add_argument('--headless')  # 无头参数
        options.add_argument('--disable-gpu')
        
        desired_capabilities = DesiredCapabilities.CHROME
        desired_capabilities["pageLoadStrategy"] = "eager"

        # 创建浏览器
        self.driver = Chrome(executable_path=DRIVER_PATH, options=options, desired_capabilities=desired_capabilities)
        self.url = url
        # 打开博客地址
        self.driver.get(url)
        # 窗口最大化
        self.driver.maximize_window()
        self.number_content = 0
        self.lists = self.driver.find_elements_by_xpath('//*[@id="articleMeList-blog"]/div[2]/div')

    # 寻找文章
    def update_content(self, index=0):
        print('输出index=', index)
        # 定位到列表
        lists = self.driver.find_elements_by_xpath('//*[@id="articleMeList-blog"]/div[2]/div')
        # 通过给定的index,取出对应的值
        list_item = lists[index]
        list_title = list_item.find_element_by_xpath('./h4/a')
        # 滚动到指定元素
        js4 = "arguments[0].scrollIntoView();"
        self.driver.execute_script(js4, list_title)
        # 等待1秒
        self.driver.execute_script("arguments[0].click();", list_title)
        try:
            self.changeBiaoQian()

        except Exception as result:
            print('click is error', result)
            self.driver.quit()

    # 切换标签
    def changeBiaoQian(self):
        # 获取所有句柄
        handles = self.driver.window_handles
        # 切换句柄
        self.driver.switch_to.window(handles[1])
        # 关闭打开的界面
        print(self.driver.title)
        time.sleep(1)
        self.driver.close()
        try:
            # 无限循环
            while True:
                # 回到最开始的标签
                self.driver.switch_to.window(handles[0])
                # 刷新一次
                self.driver.refresh()
                # 等待1秒
                time.sleep(1)
                self.number_content += 1
                if self.number_content == len(self.lists):
                    self.number_content = 0
                # 再次重新打开
                self.update_content(self.number_content)
                break
        except Exception as result:
            print("有异常结束", result)
            try:
                f = open('test.txt', 'w')
            except:
                pass
            else:
                dates = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
                strs = dates + 'id=' + str(os.getpid())
                f.write(strs)
            finally:
                f.close()
                self.driver.quit()
                # 结束当前进程
                os.kill(os.getpid(), 9)

    def run(self):
        self.update_content()


if __name__ == '__main__':
    csdn = CSDN_shuake('https://blog.csdn.net/wds326598')
    csdn.run()

代码中有几个需要注意点:

  • DRIVER_PATH :写自己chromedriver的路径
  • 由于代码执行是无限执行打开-关闭,打开-关闭操作,到最末尾了,又重新从0开始执行,形成了一个死递归
    而递归都有一个最大递归深度1000,超过以后代码就会抛出异常!!
  • 要解决这个问题,就需要捕获异常,当捕获到异常以后,程序就会结束运行,然后我会把当前异常的时间,和进程ID,写入到一个test.txt文件中
  • 另写一个脚本文件去定时监测这个test.txt文件,当发现这个test.txt有数据了,说明你程序已经抛出过异常结束了,然后我们要做的就是重新启动!
  • 这样就可以无限制,一天24小时刷所有博客了

四、运行成功的效果图

Liunx运行的脚本日志

在这里插入图片描述

总结

一句话,刷量是可耻的行为!!! 本文章主要是学习selenium的使用

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章           查看所有文章
加:2021-09-04 17:50:56  更:2021-09-04 17:52:30 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/17 22:17:11-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码