新版的VSCode的设置视图默认是将workbench.settings.useSplitJSON关闭的，然后新手（比如我）发现网上很多教程都是编辑一个json配置文件，有时候搜半天不知道在哪儿...所以先在设置搜索workbench.settings.useSplitJSON，将它勾上然后再搜索python.linting.pylint，点击右上角右起第三个图标打开设置就可以编辑配置文件了下面是我的语法检查设定，具体含义可以对应官方文档查看（主要是懒得写）python.linting.pylintArgs主要是可以用来关闭一些不必要的提示，否则全屏幕都是各种警告（毕竟代码渣）{ "python.linting.pylintArgs": [ "--extension-pkg-whitelist=PyQt5", "--disable=W0612,W0631,W0703,W0621,W0613,W0611,W1308,C0411,C0111,C0103,C0301,C0304,C0305,E1101,R0913,R0914,R0915,R0903" , ], }
[dplayer url="http://pan.iqiyi.com/ext/paopao/?token=eJxjYGBgmBQtsZUBBGZOWAkAFbIDjQ.mp4" pic="http://pan.iqiyi.com/ext/paopao/?token=eJxjYGBgmBQtsZUBBGZO0QIAFTsDEg.jpg" autoplay="true"/]操作视频预览如上（不知道能不能看）。总的来说就是：python通过selenium库控制Chrome类的浏览器执行打印页面的操作，涉及到的问题如下：swf转pdf，很特定的情况下才有方法。单页是swf，新版本Chrome无法在headless情况下打开flash。就算默认打开flash（注册表的方式），然而Chrome会直接下载swf文件，而不是加载。360极速浏览器可以加载swf并打印页面，但没找到用selenium控制它的方法。这网站swf链接规律有坑，需最后还是用接口拼接的链接。...还有很多要写的，但是今天太晚了...最后发现360安全浏览器可以满足要求。最终得到的pdf清晰度很好。暂时写到这里，有空再补充，毕竟踩了很多坑。————2019/08/19 15:40————(手机码字ing，有些没记住)起因一个朋友截图谷歌搜索Storytown pdf，说想要这个书的电子版，不过谷歌到的只有一点残缺的pdf，没有完整的，当然亚马逊是有卖的←_←不过呢，最后还是在(rasd)上面找到了，不过这个网站像是套了一层，实际来源是thinkcentral，不过thinkcentral这个网站得有账号，普通用户注册不了。这不重要，反正目前这个网站能在线看书，准确说是一个互动式的学习，但它是基于swf的。怎么弄下来呢？F12一看，分页是单独的swf，那可以把swf下载来了然后反编译提取图片即可！下载了一个swf，用FFDec反编译，有一个frame就是一个单页：导出为png，打开一看清晰度还可以(那后面拼图做成pdf就好了，心想……)。————2019/08/19 16:50————那快速自动化的流程就是下载swf，反编译，导出图片，按顺序合成……然后我试着用python来做反编译这个事情，幸运的是网络上有一个可参考的例子，通过一个库(pyswf)，能解析swf的结构，解压资源。不过我发现对于我来说有点复杂了，等我把swf解压这步理解清楚就不知道何年何月了。。然后又找到一个工具swftools，不过它是各种转为swf，而不是swf转回。不过呢它在某个情况下可以复原pdf，然而！它是基于python2的(？？？)。遂放弃反编译swf←_←接着我想找现成工具解压swf内资源，然后我再合成图片，反编译的swf内文字部分其实是可以拿到文本的，不过它是位图，背景是另一个图(其实还是卡在解压资源)，提这个是因为我想在pdf能复制到文本。我还是图样图森破。另外在打开单个swf的时候，通过放大可以发现很清晰，所以位图没错了。接着，就是在放大的时候，右键的打印选项提醒了我，于是打印了单页的swf，发现质量非常好，清晰度也棒！终于到正题了，那我可以打印得到单页pdf，最后合成。话不多说开始做，通过搜索，可以知道打印这个操作是可以用python通过selenium库办到的(面向google写代码)。这里引出了几个问题：一是单个swf打开会缺少一些东西，比如播放音频的按钮，部分单词选中颜色效果以及一些动画效果，因为这些是外部嵌套的swf完成的，好在需要的是书，这些部分可有可无(不过呢，音频的位置好像在一个接口里面有，有精力的话倒是可以试试把音频内容也添加到pdf里面，pdf应该是支持音频的)。二是谷歌浏览器对swf不友好，链接以swf结尾会背直接下载文件，而我需要的是网页加载完毕的效果后打印，解决方法是写一个HTML文件，里面引用swf的链接，打开HTML文件后会加载。不过得手动允许flash才能加载，好在网上说能修改注册表让chrome默认允许flash，但我尝试用selenium控制chrome，没有成功，最终放弃。我打开flash链接看加载效果是用的360极速浏览器，360极速内核还是基于chrome(的开源版本？)然后想应该也能用selenium操作，搜了下貌似真的可以。不过在我N次尝试后，发现并不能，遂改用网络教程中的360安全浏览器，果然成了！关键的打印swf一步解决了。最开始看了下swf的链接还是有规律组成的，就手动跳到最后几页观察了一下，然后就开始跑代码了，最开始一切正常。后来出现chapter首字母在第一章后变成大写……后来出现数字四位补0……后来出现新章节处有a/b这样的附加字符……后来发现自己的代码逻辑有问题……于是乎，改用从接口获取拼接的后部分，这才稳定了下来！打印的时候有个小插曲，就是selenium控制不能自定义打印保存目录(下载目录可以)，不能自定义打印文件名，只好通过浏览器自动保存的名字匹配，然后重命名，移动到保存目录。。最终，完成(pdf合并过程略……)。————2019/08/19 23:10————部分相关代码：多个pdf合并为一个pdf文件，正则是匹配页数，按页数排序添加，避免顺序错误。另外merger增加的时候，似乎有数量限制，具体多少不知道，大概在300-450之间吧，所以待合并的pdf文件数量太多则需要多次合并。import os import re from PyPDF2 import PdfFileReader, PdfFileMerger main_text = [f for f in os.listdir() if 'pdf' in f] fl=sorted(main_text,key=lambda x:int(re.findall(".*?Page(\d+).pdf",x)[0])) all_files = list() all_files.extend(fl) merger = PdfFileMerger() _ = [merger.append(PdfFileReader(f), 'rb') for f in all_files] merger.write('output.pdf')从pages.xml接口中提取swf待拼接的第二部分，其中89是swf_l长度除以10向上取整的值，为啥有这个呢，因为用的vscode，当时直接想着把这个写在py文件里面，然后拼链接，然而vscode不能一行直接粘贴太长的内容。然后换行打印一下swf_ten即可。import re import requests u = "https://www-k6.thinkcentral.com/content/hsp/reading/storytown/na/gr6/esen_9780153597787_/assets/xml-bin/chapter{}/pages.xml" swf_l = [] for c in range(31): r = requests.get(u.format(c)).content.decode("latin-1") swf_l += re.findall("<url>(.+?\.swf)</url>",r) swf_ten = [] for i in range(89): swf_ten.append(swf_l[i*10:(i+1)*10])其他细节就不再贴出来了（太渣渣）。最后来两张成品效果图吧！
————2019/08/18————修改typecho配置 后台ip显示为正常ip而非cdn的ip————2019/08/17————恢复了share站点。其他待处理事项：使用cdn后，后台ip不是真实ip问题。share的数据库看起来有很多问题，可能需要重新导出整理。检视typecho在大量文章下的使用情况。————2019/08/13————增加了评论邮件提醒功能。使用的插件是LoveKKComment更改原bootcss的js/css地址为jsdelivr，jsdelivr用到的js/css如下： 注释掉了X.js中InstantClick的部分，这看起来是原作者没有写完，这样console暂时不会报错Uncaught ReferenceError: InstantClick is not defined。——————————————————下午倒腾了几个小时，终于把博客重新迁移到新的服务器上了。遇到几个问题，在此记录一下。域名变更为了平滑过渡（我也不知是不是这样想的）？然后就弄了个临时域名，然后搭好配置了一些基本的东西，隔了几天（即今天）才把之前的文章恢复上来。然后typecho告诉我你这几天写的会被直接清除覆盖。还好看到了，要不然手快就把这两天的删掉了。然后没找到什么好办法能同时保留已有文章同时恢复之前的文章，就手动备份，Ctrl C + Ctrl V就简单做了下。。主要是比较少，就两三篇，另外想到的方法就是插入数据库，不过这很不划算。跑偏了，回到域名变更的问题上来，临时域名这些步骤操作完了，那就要切回到正式的blog域名啊，结果DNS解析改完之后居然登录不了后台，一直提示“密码或用户名无效”，这我就怪了，我就改了域名呐。。搜了下似乎也没有人说出来这个是为啥不行，清一色的phpMyAdmin改密码...不行不行，改个密码还要安装phpMyAdmin那可太费时间了（主要是不熟悉），那就直接命令行mysql改呗！然后找到这篇博客，下面是更改的方法，贴一下（主要是怕原博客挂了...）由于我用浏览器保存了密码，每次登录都是自动填写，老域名到期换了新域名，浏览器就不认网站了。试了好多次才成功，记下来。在数据库中执行以下语句用户ID如有需要记得改UPDATE `typecho_users` SET `PASSWORD` = '$P$BfpuGkuI0iIH/4/eLbkYXcRpWyN0Je0' WHERE `uid` = 1; UPDATE `typecho_users` SET `authcode` = 'ff576420bcabf63885dd553174dbaa77ef2f641e' WHERE `uid` = 1;执行完毕后相关UID的用户密码就是123456了不过我有点不放心，所以就想知道数据库表结构，然后突然发现自己好久没用过mysql了，命令几乎全部GG。不过最终还是查到命令了（就当复习一下），那么下面是整个修改数据库用户信息所执行的命令。mysql -u yourusername -p yourpassword mysql> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | typecho | +--------------------+ mysql> select table_name from information_schema.tables where table_schema="typecho"; +-----------------------+ | table_name | +-----------------------+ | typecho_comments | | typecho_contents | | typecho_exsearch | | typecho_fields | | typecho_links | | typecho_metas | | typecho_options | | typecho_relationships | | typecho_users | +-----------------------+ mysql> use typecho; mysql> select * from typecho_users; +-----+-------+------------------------------------+------------------+------------------------+------------+------------+------------+------------+---------------+----------------------------------+ | uid | name | password | mail | url | screenName | created | activated | logged | group | authCode | +-----+-------+------------------------------------+------------------+------------------------+------------+------------+------------+------------+---------------+----------------------------------+ | 1 | username | $P$***. | **** | http://blog.weimo.info | 未末 | **** | **** | **** | administrator | **** | +-----+-------+------------------------------------+------------------+------------------------+------------+------------+------------+------------+---------------+----------------------------------+ 1 row in set (0.00 sec) mysql> UPDATE `typecho_users` SET `PASSWORD` = '$P$BfpuGkuI0iIH/4/eLbkYXcRpWyN0Je0' WHERE `uid` = 1; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> UPDATE `typecho_users` SET `authcode` = 'ff576420bcabf63885dd553174dbaa77ef2f641e' WHERE `uid` = 1; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0补充说明：mysql的用户名和密码是最开始创建博客时设置的，记不住好像也能重置来着(说完上面一点就不得不展开一下了！在建立博客的时候，网上的教程几乎清一色是说把typecho的压缩包解压到/var/www/html下面，然后打开ip就行了，不过这样前提是环境是安装好了的，比如mysql、php之类的。然而我发现通过网页的向导常常不能完成数据库的创建，因此每次我都是先手动创建一个typecho的表的。use后select下用户表的全部用户，就能看到具体信息了，然后重置密码则更新下对应字段的值即可，建议改了数据库马上登录然后修改密码。至此由域名变更引起的后台使用正确的用户名密码也不能登录的问题解决了。关于图标favicon.ico希望的效果是这样的（网页源代码里面） 使用了G主题后，在设置外观处（/admin/options-theme.php）可以指定图标，不过在文档里面似乎没有提到这里的设置方法，然后测试了几次，结论就是最好是设置为一个直链。如果留空那么查看网页源代码会发现href后面是空字符，粗略看了下代码，用了一个favicon()函数，具体就没细看了。然后测试直接填favicon.ico，在网页源代码的效果与预期一致了，不过如果设置了首页为单独页（G主题），那么在切换到文章页面就会增加一个/blog在中间，然后图标就没办法显示了，所以还是填了完整的直链，源代码最终的效果入下： favicon.ico如果要放在自己服务器上，那么应该放在网站的根目录下，也就是install.php一个目录。搜索插件G主题手册中推荐的ExSearch非常好用，在这里再推荐一下！注意G主题是有引入JQuery的，所以在插件的设置里“引入JQuery”一项应当选否。TODO博客大致OK了，预计会长时间放在目前的主机商上，就是有点小贵，不过多用途也算是满意了:)但接下来还有些要做的：博客评论邮件提醒+回复，之前用的是CommentToMail看看改天能不能配置好（虽然博客没人看）访客统计，之前用的是Access插件，虽然之前写了记录一个ipv6的问题，不过并没有完全搞定，后续也需要完善下。看了下原项目似乎也没修复这个问题(其他。应该就是找个时间调一下配色（不过我审美可能不行，默认也挺好），以及坚持更新。页面布局，比如我觉得搜索应该放在顶部，关于只放下边就好了。
---2019/08/05---本来准备写一长篇关于近期的文章，不过今天又由于种种原因没有时间了...不过多少还是要开一个头的。