我写了一个自动化脚本涨粉,从0阅读到接近100粉丝(二)

简介: 我写了一个自动化脚本涨粉,从0阅读到接近100粉丝

06 模拟不同设备


const puppeteer = require('puppeteer');
const devices = require('puppeteer/DeviceDescriptors');
const iPhone = devices['iPhone 6'];
puppeteer.launch().then(async browser => {
  const page = await browser.newPage();
  await page.emulate(iPhone);
  await page.goto('https://www.baidu.com');
  // 其他操作...
  await browser.close();
});


07 请求拦截


const puppeteer = require('puppeteer');
async function run () {
  const browser = await puppeteer.launch({
    headless:false,
    defaultViewport:{
      width:1280,
      height:800
    }
  })
  const page = await browser.newPage();
  await page.setRequestInterception(true);
  page.on('request', interceptedRequest => {
    const blockTypes = new Set(['image', 'media', 'font']);
    const type = interceptedRequest.resourceType();
    const shouldBlock = blockTypes.has(type);
    if (shouldBlock) {
      interceptedRequest.abort();
    } else {
      interceptedRequest.continue();
    }
  });
  await page.goto('https://t.zhongan.com/group');
}
run();


08 性能分析


const puppeteer = require('puppeteer');
(async () => {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    await page.tracing.start({path: 'trace.json'});
    await page.goto('https://t.zhongan.com/group');
    await page.tracing.stop();
    browser.close();
})();


09 生成pdf


const URL = 'http://es6.ruanyifeng.com';
const puppeteer = require('puppeteer');
const fs = require('fs');
fs.mkdirSync('es6-pdf');
(async () => {
  let browser = await puppeteer.launch();
  let page = await browser.newPage();
  await page.goto(URL);
  await page.waitFor(5000); // 等待五秒,确保页面加载完毕
  // 获取左侧导航的所有链接地址及名字
  let aTags = await page.evaluate(() => {
    let eleArr = [...document.querySelectorAll('#sidebar ol li a')];
    return eleArr.map((a) =>{
        return {
          href: a.href.trim(),
          name: a.text
        }
    });
  });
   // 先将本页保存成pdf,并关闭本页
  console.log('正在保存:0.' + aTags[0].name);
  await page.pdf({path: `./es6-pdf/0.${aTags[0].name}.pdf`});
  // 遍历节点数组,逐个打开并保存 (此处不再打印第一页)
  for (let i = 1, len = aTags.length; i < len; i++) {
    let a = aTags[i];
    console.log('正在保存:' + i + '.' + a.name);
    page = await browser.newPage();
    await page.goto(a.href);
    await page.waitFor(5000);
    await page.pdf({path: `./es6-pdf/${i + '.' + a.name}.pdf`});
  }
  browser.close();
})


10 自动化发布微博


const puppeteer = require('puppeteer');
const {username,password} = require('./config')
async function run(){
    const browser = await puppeteer.launch({
        headless:false,
        defaultViewport:{width:1200,height:700}, 
        ignoreDefaultArgs:['--enable-automation'],
        slowMo:200,
        args:['--window-size=1200,700']})
    const page = await browser.newPage();
    await page.goto('http://wufazhuce.com/',{waitUntil:'networkidle2'});
    const OneText = await page.$eval('div.fp-one-cita > a',ele=>ele.innerText);
    console.log('OneText:',OneText);
    await page.goto('https://weibo.com/',{waitUntil:'networkidle2'});
    await page.waitFor(2*1000);
    await page.reload();
    const loginUserInput = await page.waitForSelector('input#loginname');
    await loginUserInput.click();
    await loginUserInput.type(username);
    const loginUserPasswdInput = await page.waitForSelector('input[type="password"]');
    await loginUserPasswdInput.click();
    await loginUserPasswdInput.type(password);
    const loginBtn = await page.waitForSelector('a[action-type="btn_submit"]')
    await loginBtn.click();
    const textarea = await page.waitForSelector('textarea[class="W_input"]')
    await textarea.click();
    await textarea.type(OneText);
    const sendBtn = await page.waitForSelector('a[node-type="submit"]');
    await sendBtn.click();
}
run();


CSDN的脚本


image.png

这里注意CSDN有反扒机制,规则自己琢磨就行,我贴了伪代码,核心代码就不开放,毕竟自己玩玩就行了

const puppeteer = require('puppeteer');
async function autoCommentCSDN(username, password, targetBlogger, commentContent) {
  const browser = await puppeteer.launch({ headless: false }); // 打开有头浏览器
  const page = await browser.newPage();
  // 登录CSDN
  await page.goto('https://passport.csdn.net/login');
  await page.waitForTimeout(1000); // 等待页面加载
  // 切换到最后一个Tab (账号登录)
    // 点击“密码登录”
    const passwordLoginButton = await page.waitForXPath('//span[contains(text(), "密码登录")]');
    await passwordLoginButton.click();
  // 输入用户名和密码并登录
  const inputFields = await page.$$('.base-input-text');
  await inputFields[0].type( username);
  await inputFields[1].type( password);
  await page.click('.base-button');
  await page.waitForNavigation();
//   // 跳转到博主的首页
  await page.goto(`https://blog.csdn.net/${targetBlogger}?type=blog`);
//   // 点击第一篇文章的标题,进入文章页面
  await page.waitForSelector('.list-box-cont', { visible: true });
  await page.click('.list-box-cont');
//   // 获取文章ID
  console.log('page.url()',page.url())
  // await page.waitForTimeout(1000); // 等待页面加载
  await page.goto('https://blog.csdn.net/weixin_52898349/article/details/132115618')
await page.waitForTimeout(1000); // 等待页面加载
console.log('开始点击评论按钮...')
console.log('page.url()',page.url())
// 获取当前页面的DOM内容
const bodyHTML = await page.evaluate(() => {
    return document.body.innerHTML;
});
console.log(bodyHTML);
//  await page.waitForSelector('.comment-side-tit');
//  const commentInput = await page.$('.comment-side-tit');
//  await commentInput.click();
 // 等待评论按钮出现
 // 点击评论按钮
//  await page.waitForSelector('.comment-content');
//  const commentInput = await page.$('.comment-content textarea');
//  await commentInput.type(commentContent);
//  const submitButton = await page.$('.btn-comment-input');
//  await submitButton.click();
//  console.log('评论成功!');
//  await browser.close();
}
// 请替换以下参数为您的CSDN账号信息、目标博主和评论内容
const username = 'weixin_52898349';
const password = 'xxx!';
const targetBlogger = 'weixin_52898349'; // 目标博主的CSDN用户名
const commentContent = '各位大佬们帮忙三连一下,非常感谢!!!!!!!!!!!'; // 评论内容
autoCommentCSDN(username, password, targetBlogger, commentContent);

目录
相关文章
|
2天前
|
存储 Python
Python自动化脚本编写指南
【10月更文挑战第38天】本文旨在为初学者提供一条清晰的路径,通过Python实现日常任务的自动化。我们将从基础语法讲起,逐步引导读者理解如何将代码块组合成有效脚本,并探讨常见错误及调试技巧。文章不仅涉及理论知识,还包括实际案例分析,帮助读者快速入门并提升编程能力。
13 2
|
4天前
|
运维 监控 Python
自动化运维:使用Python脚本简化日常任务
【10月更文挑战第36天】在数字化时代,运维工作的效率和准确性成为企业竞争力的关键。本文将介绍如何通过编写Python脚本来自动化日常的运维任务,不仅提高工作效率,还能降低人为错误的风险。从基础的文件操作到进阶的网络管理,我们将一步步展示Python在自动化运维中的应用,并分享实用的代码示例,帮助读者快速掌握自动化运维的核心技能。
12 3
|
10天前
|
运维 监控 应用服务中间件
自动化运维:如何利用Python脚本提升工作效率
【10月更文挑战第30天】在快节奏的IT行业中,自动化运维已成为提升工作效率和减少人为错误的关键技术。本文将介绍如何使用Python编写简单的自动化脚本,以实现日常运维任务的自动化。通过实际案例,我们将展示如何用Python脚本简化服务器管理、批量配置更新以及监控系统性能等任务。文章不仅提供代码示例,还将深入探讨自动化运维背后的理念,帮助读者理解并应用这一技术来优化他们的工作流程。
|
11天前
|
运维 监控 Linux
自动化运维:如何利用Python脚本优化日常任务##
【10月更文挑战第29天】在现代IT运维中,自动化已成为提升效率、减少人为错误的关键技术。本文将介绍如何通过Python脚本来简化和自动化日常的运维任务,从而让运维人员能够专注于更高层次的工作。从备份管理到系统监控,再到日志分析,我们将一步步展示如何编写实用的Python脚本来处理这些任务。 ##
|
15天前
|
运维 Prometheus 监控
自动化运维之路:从脚本到DevOps
【10月更文挑战第25天】在数字化时代的浪潮中,运维不再是简单的服务器管理,而是成为了企业竞争力的核心。本文将带你走进自动化运维的世界,探索如何通过技术手段提升效率和稳定性,以及实现快速响应市场的能力。我们将一起学习如何从基础的脚本编写进化到全面的DevOps实践,包括工具的选择、流程的优化以及文化的建设。无论你是运维新手还是资深专家,这篇文章都将为你提供有价值的见解和实用的技巧。
16 3
|
17天前
|
JSON 测试技术 持续交付
自动化测试与脚本编写:Python实践指南
自动化测试与脚本编写:Python实践指南
22 1
|
1月前
|
人工智能 运维 Devops
自动化运维之路:从脚本到DevOps的转变
【10月更文挑战第7天】在这篇文章中,我们将一起探索自动化运维的演变历程,从最初的简单脚本到现代的DevOps实践。我们将深入理解自动化如何改变了运维工作的本质,并讨论实现这一转变的关键技术和策略。文章将不包含代码示例,而是聚焦于理念、工具和方法论的介绍,旨在为读者提供一个全面的自动化运维框架视图。
|
1月前
|
人工智能 运维 监控
自动化运维:从脚本到工具的演变之路
【10月更文挑战第8天】在数字化时代的浪潮中,运维不再是简单的硬件维护,它已经演变成一场关于效率、稳定性和创新的技术革命。本文将带您领略自动化运维的魅力,从最初的脚本编写到现代复杂的自动化工具,我们将一探究竟,看看这些工具如何帮助运维人员简化日常任务,提升工作效率,并最终推动业务发展。
|
28天前
|
监控 关系型数据库 MySQL
PowerShell 脚本编写 :自动化Windows 开发工作流程
PowerShell 脚本编写 :自动化Windows 开发工作流程
24 0
|
1月前
|
Web App开发 安全 Java
网页内容获取:Scala自动化脚本的实现
网页内容获取:Scala自动化脚本的实现