hrefspace

 找回密码
 立即注册
搜索
热搜: PHP PS 程序设计
查看: 1087|回复: 4

IT 玩活儿

[复制链接]

567

主题

579

帖子

1840

积分

版主

Rank: 7Rank: 7Rank: 7

积分
1840
发表于 2024-1-30 08:54:19 | 显示全部楼层 |阅读模式
* 本帖主要介绍一些实用的 IT 技巧 *

最近在学习射影几何,除了一众教材之外,《射影几何的初等说明》(https://tieba.baidu.com/p/7682645300 )无疑最适合我等基础薄弱者,其中大量且经典的例子,更是妙乐可言。

而其中的主要内容,则以 PPT 图片的形式存在,那么,怎么将这些图片都下载到本地呢?无它,右键,图片另存为,再点下一张,重复操作。具体而言,首先将需要的帖子对应的标识(7682645300)加入到 tieba.baidu.com/photo/p?tid= 之后,就可以打开该帖子对应的大图网址(tieba.baidu.com/photo/p?tid=7682645300),然后鼠标右键,图片另存为,再点下一张,不断重复。

而这样的重复操作,交给 AutoHotKey 就再合适不过了,将经下代码写到文件 tieba.ahk 中,然后运行 autohotkey tieba.ahk,按 F12 就可以逐张图片下载了。
  1. ; 用于调整每次操作的延时,以保证浏览器有足够的时间响应下面的模拟操作n := 10F12::        CoordMode, Mouse, Screen        ; 根据网页中提示的图片张数设置循环次数        Loop, 215 {                ; 模拟点鼠标右键,发出点击后,将弹出右键菜单                MouseClick, right, 710, 560                Sleep 30*n                ; 将鼠标移到图片“另存为"菜单项,再按左键确认下载                ; 发出模拟点击左键消息,之后将弹出“另存为”的对话框                MouseClick, left, 780, 620                Sleep 100*n                ; 将鼠标移到“另存为”的对话框,点击“确认”按键,完成下载保存到本地                MouseClick, left, 250, 465                Sleep 30*n                ; 继续将鼠标移到某恰当位置,按左键,切换到下一张                MouseClick, left, 1200, 560                Sleep 30*n      }return
复制代码

上述操作需要预先确认该帖子共有多少张图片,下面略加修改,让程序不停地模拟操作下一张,直到用户主动中止这个过程:
  1. ; 用于调整每次操作的延时,以保证浏览器有足够的时间响应下面的模拟操作n := 10; 当用户按下 ESC 键,isbreak 将设置为 1,将退出下面的循环isbreak := 0; 设置 ESC 热键ESC::        isbreak = 1return; 设置 F12 热键F12::        CoordMode, Mouse, Screen        ; 循环足够多的次数(这样一来就需要手式按 ESC 中断循环了)        Loop, 10000 {                ; 模拟点鼠标右键,发出点击后,将弹出右键菜单                MouseClick, right, 710, 560                Sleep 30*n                ; 将鼠标移到图片“另存为"菜单项,再按左键确认下载                ; 发出模拟点击左键消息,之后将弹出“另存为”的对话框                MouseClick, left, 780, 620                Sleep 100*n                ; 将鼠标移到“另存为”的对话框,点击“确认”按键,完成下载保存到本地                MouseClick, left, 250, 465                Sleep 30*n                ; 继续将鼠标移到某恰当位置,按左键,切换到下一张                MouseClick, left, 1200, 560                Sleep 30*n                If (isbreak == 1) {                        isbreak = 0                        break                }              }return
复制代码
回复

使用道具 举报

0

主题

167

帖子

2

积分

新手上路

Rank: 1

积分
2
发表于 2024-1-30 08:55:18 | 显示全部楼层
上述操作将帖子的所有图片都下载下来之后,这些图片就构成了一个完整的 PPT ,这时就可以用图像浏览器来学习了,但图像浏览器通常默认根据文件名排序进行翻页,但原来的文件名是随机的,有没有办法将这些文件按时间顺序重新命名为比如 1xxx.jpg 队列的文件名?这时,awk 上场最合适不过了。

在命令行中输入如下命令行:
  1. dir /o:d /b | awk "{cmd=sprintf("mv %s %d_%s", $0, 1001+i, $0); i=i+1;system(cmd);}"稍微解析一下, dir /o:d 表示按时间顺序列出当前目录的所有文件,/b 表示只需显示文件名而不显示其它如文件大小、日期之类的数据。awk (对输入的文本逐行地,尽管这个说法不完全正确)执行你指定的代码,其中 $0 表示当前行,sprintf() 用法和 c 语言相同,cmd 和 i 分别是两个变量,cmd=sprintf("mv %s %d_%s", $0, 1001+i, $0); 将返回 cmd = "mv 文件名 1xxx_文件名",比如(从 dir /o:d 获得)第一个输入是 aaa.jpg,这时 $0 就是 aaa.jpg,cmd 将是字符串 mv aaa.jpg 1001_aaa.jpg; 第二个输入是 bbb.jpg,cmd 这时将是 1002_bbb.jpg。最后, system() 表示执行外部命令,于是对于输入 aaa.jpg 而言,将执行命令行 mv aaa.jpg 1001_aaa.jpg,调用 mv 命令将文件 aaa.jpg 改名为 1001_aaa.jpg,其它下同。
复制代码

awk (及 awk.exe) 是(Linux 上)极其有用的小工具之一,相信大家都很熟悉,网上也有大量的资料。
回复

使用道具 举报

0

主题

200

帖子

2

积分

新手上路

Rank: 1

积分
2
发表于 2024-1-30 08:55:26 | 显示全部楼层
在命令行中操作剪贴板,windows 下使用 clip.exe 和 paste.exe 。

将文件 aaa.txt 中包含字符串 abcd 的行拷贝到剪贴板中:
  1. awk /abcd/ aaa.txt | clip
复制代码

如果是 vim,则可以使用如下命令实现抽取所有包含 abcd 的行到寄存器 A 中(使用大写寄存器才能保存所有,否则只是最后一行):
  1. :g/abcd/y A
复制代码

当然使用外部命令也是可以的:
  1. :!awk /abcd/ % | clip
复制代码

若改成
  1. :1,$!awk /abcd/ | clip
复制代码
可用但有副作用(会清空当前 buffer 的内容 )

从剪贴板中读取,并打印出 $2(第 2 个字段) 大于 100 的行:
  1. paste | awk "{if (0+$2 > 100) {print($0)}}" 或 paste | awk "{if (0+$2 > 100) print}" 或 paste | awk "(0+$2) > 100"其中,0+$2 将 $2 转换成数值类型,否则 if ($2 > 100) 将比较 (字符串形式的 $2) 和 (字符串形式的 100) 。
复制代码
回复

使用道具 举报

0

主题

177

帖子

2

积分

新手上路

Rank: 1

积分
2
发表于 2024-1-30 08:56:15 | 显示全部楼层
如何将帖子中的数学公式还原成 Latex 源代码,Kuing 老大的悠闲数学论坛做了大量的探索,取得累累成果,详见下面两个帖子:
http://kuing.infinityfreeapp.com ... hread&tid=11863
http://kuing.infinityfreeapp.com ... wthread&tid=173

其中 “方法 B:在浏览器调试器中屏蔽 tex-svg.js(参考 3#)” 具有普遍性,也适用于别的论坛。
回复

使用道具 举报

0

主题

172

帖子

63

积分

关内侯

Rank: 2

积分
63
发表于 2024-1-30 08:57:05 | 显示全部楼层
获取一个帖子的原始代码(加载各种 js 之前)最通用的方法是打开浏览器的 “开发者工具"(并重新加载网页),转到 "Network" 的属性页,将光标移到 Request 列表(如图)的第一项,然后在右键菜单中选择 ”Copy" - "Copy response",只要网页不禁用  “开发者工具",这个方法都应该好使。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|hrefspace

GMT+8, 2024-4-28 21:02 , Processed in 0.071106 second(s), 22 queries .

Powered by hrefspace X3.4 Licensed

Copyright © 2022, hrefspace.

快速回复 返回顶部 返回列表