自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(45)
  • 收藏
  • 关注

原创 使用If-None-Match和Etag协商缓存json动态数据

现代网页大多使用ajax获取动态json数据,有些json数据很大几乎不会修改,这样的数据就适合使用缓存来加快速度,减小流量,降低服务器的负荷。普通的强缓存要指定时间,比如说24小时,这个时间很难定,因为这些数据虽然平时不会变动,但是一旦变动,因为有浏览器的缓存,页面上依旧使用旧数据,这样极大的限制了缓存的使用。有没有一种办法既使用缓存,又不会使用旧数据呢?答案就是协商缓存。

2023-07-19 13:21:42 537

原创 chromedriver僵尸进程的产生原因以及官方解决办法

做过爬虫的人应该会知道driver.quit()后有一定几率产生chromdriver的孤儿进程(或者说僵尸进程)。但是这些僵尸是死而不僵,占据着内存让人讨厌,然而如果你随意杀死这些僵尸有可能导致正在运行的爬虫出错。所以说它们是僵尸是冤枉它们,它们实际上是孤儿进程,不过习惯上还是称它们为僵尸。这个问题存在了很多年,通常清理僵尸的办法就是kill这些僵尸,但是时机不好掌握,它们在刚成为僵尸时还有活动,这时如果kill它们会导致session id失效,或者profile(user data dir)被破坏。

2023-06-29 14:33:50 1131

原创 selenium的find_elements非常慢的解决办法

后来看到国外一片文章(抱歉地址忘记了)说,find_elements慢的原因是页面上有很多ajax的请求,默认模式下会等待这些ajax的加载完成后才执行,所以阻塞了find_elements的执行,如果ajax一直在加载中就会一直等待直到超时。另外selenium的find_elements本来也比较慢,如果要追求解析速度,还可以使用第三方的xpath解析器,比如说lxml,但这些第三方解析器不能判断元素是否可见等等和浏览器相关的判断,使用有局限,作为纯粹的xpath搜索还是不错的。

2023-06-14 13:58:14 1743 1

原创 修改element ui的tabs组件解决jointjs,echarts显示不正常的问题

left: -99999em,使用绝对定位不占位,移到可见区域之外,这样dom会继续渲染,就不影响jointjs了,echarts估计也是一样的。修改就一句非常简单,但是当时脑袋短路,没有意识到v-show就是控制display: none,还以为是在其他地方加上的,反复读tabs的其他代码都没有发现哪里有修改display: none,最后才发现是v-show在作怪,修改后完美渲染jointjs。然后在自己代码里引入修改后的组件,就可以替换element UI原来的tabs组件,用法和原来一样非常方便。

2023-06-08 22:13:45 554

原创 selenium通过performance log获取状态码,Content-Type,以及重定向路径

selenium的官方不提供获取状态码,Conten-Type,以及重定向路径的方法,并且官方说这些功能将来也不会有。

2023-05-15 13:26:47 1505 2

原创 selenium多实例爬虫的忠告和参数配置

单线程爬虫本身很简单,而大规模的分布式多进程爬虫就比较复杂,Scrapy这种简单的框架拿来学习用或者做简单事情够用了,真实的需求往往比较复杂,需要大量定制,需要对Scrapy非常了解,与其被Scrapy这个框框限制住,不如自己写。当然C#,java也算是主流,其他的不建议选择。windows和linux都使用过,个人建议使用linux,windows上感觉有内存泄漏,爬虫跑多了会内存不足,还有一个重要原因是linux可以使用docker,docker绝对是安装开发部署的利器,测试环境更是必备。

2023-05-04 11:04:14 2323 2

原创 对java,.net,Ruby,python,JavaScript,PHP的点评

缺点是没有热部署,语法独立特行,对C系语言经验者不友好,对匿名函数支持不好,不能多行匿名函数,没有真正的多线程,不过在通用脚本语言里面是最好的。PHP:最简洁的语言,没有复杂的语法,主要用于WEB后端,基本上是函数式编程,学习成本低入门简单,还有一个很大的优点是支持热部署,用git pull就可以发布程序。.net:融入了各种最新的现代语言特征,.net 5以后可以运行在linux平台,语言更新换代快,是java的替代语言,缺点是做web的话,开发效率不如脚本语言。接触了很多语言后,发表一下个人的浅见。

2023-05-03 16:01:36 541

原创 celery的控制程序如何与worker通信

celery的官方文档太简单,很多地方都没有说明清楚。就我目前知道的,有事件events与广播broadcast这2中方式,在官方文档里面都没有找到正式的用法,是我在网上搜到的。

2023-04-28 13:59:50 172

原创 tinymce组件的异步加载

实际测试发现await虽然可以阻塞mounted钩子,但是不能阻塞mounted后面的钩子导致后面的代码出错,也就是说vue生命周期钩子不支持await,每个钩子并不会等待上一个钩子执行完后才执行,它们是异步的,一旦你阻塞这个钩子,那么下一个钩子就会执行。既然vue生命周期钩子不支持await,就不要试图阻塞mounted,假装t组件已经渲染完成,通过脚本加载完的事件来事后延迟渲染组件,不需要长时间的延迟,只需要延迟几秒钟tinymce.min.js的加载就完成了。异步加载脚本,加载完后发通知事件。

2023-03-29 13:59:25 729

原创 tinymce加载自定义语言包

对tinymce自带的语言包不满意,重新修改语言包后通过language_url来加载自定义语言包。但是不管怎么修改language_url都没有生效,最后发现自定义的语言代码不能和既有的语言代码重复,否则不会加载。这个问题困扰了大半天,在网上没有找到解决办法,是自己摸索出来的,与大家分享。为自定义语言代码,与语言包上的文件名相匹配。将修改后的语言包放到public目录下,并 配置中的选项设置。修改语言包,将语言代码设置为自定义语言代码,注意不能和既有的语言代码重复,这点很重要。

2023-03-20 14:42:02 635

原创 全局定制elementui的确认框confirm

全局定制elementui的确认框confirm,实现键盘控制按钮的焦点。

2022-12-02 09:36:48 2885

原创 如何解决selenium的dragAndDrop失效的问题

selenium的dragAndDrop失效的原因和解决办法

2022-09-08 11:26:01 1166

原创 katalon开启google浏览器权限

这种方法是模拟人工点击allow,通常需要等待,并且如果当前窗口不是浏览器就不起作用,个人不喜欢robot类,所以想直接给浏览器授权,就可以避免弹出此对话框。参照上面的代码,在katalon的 点击菜单Project->setting菜单,输入下面的配置。自动测试不允许交互,可以通过Robot工具来模拟点击allow。这个是开启clipboard权限的例子,其他权限也是如法炮制。设置权限后启动测试就不会弹出授权的对话框了。需要开启权限,通常会弹出下面的对话框。python的授权代码如下。

2022-08-23 08:48:57 284

原创 vue中使用jointjs的问题

刚开始使用jointjs是使用原生js来书写的,因为jointjs的官网上的例子全是原生js的代码。原生js可以通过在index.html装载进vue,能够很好的运行。不过原生js不是模块化的,不如es6方便,所以想改成es6的书写方法。1.jointjs导入问题根据官网JointJS - JavaScript diagramming library - Getting started.import { dia, ui, shapes } from '@clientio/rappid';

2022-04-20 10:47:32 1541

原创 squid多实例官方说明注解

为什么要多实例运行?有什么使用场景?比如说要把代理分成2个服务,一个是面向内部人员的不需要用户名密码,用IP地址来限定。另一个是面向外网的,需要用户名密码来验证。 一台机器上有多个网卡,需要设置不同的代理MultipleInstances - Squid Web Proxy Wiki多实例官方说明参照上面的地址,下面就关键部分说明一下Relevant squid.conf directives visible_hostname you may want to keep this u

2022-04-14 09:52:39 571

原创 axios的get方法中,参数值为null时,参数被删除的问题

问题描述vue开发的时候,发现get请求的参数值为null,这个参数会被删除掉,在后端检查这个参数时不存在就会报错。Example:入力参数: { foo: null, bar: "baz", qux: undefined }变换后的参数: ?bar=bazfoo被删除了,后台参数检查时发现foo不存在,就会报错参照https://github.com/axios/axios/issues/1139这个问题在axios:release/1.0.0-beta.1中被修改,但是没有反.

2022-03-14 15:43:20 8418

原创 用ArrayIterator 定制PHP数组,实现参数自动检查

php数组很强大,有很多功能。用ArrayIterator 可添加更多的功能。比如说在cakephp框架中,request的query参数就是一个数组,可以通过key来获取不同的参数,但是当试图获取数据中不存在的key时,并不会报错,只是返回null。浏览器表单输入数据,传到后台后,理论上需要重新检查,参数是否有,长度,类型等等,这是个比较繁琐的工作,特别是修改比较多的时候,前后台都要改。因此,对于要求不高的内部系统来说,后台可以不用检查长度,类型等等,但是参数是否存在应该要检查。对于表单项目多

2022-03-03 17:59:19 294

原创 C# 字符串替换第n次匹配项

没有现成的函数,网上找的的实现也不好,自己写了一个 static string replace(string input, string pattern, string replacement, int n) { int count = 0; string result = Regex.Replace(input, pattern, new MatchEvaluator((match) => {

2022-02-17 17:00:36 373

原创 docker构筑samba域服务器

在linux上挂载了很大的硬盘,想作为共享文件服务器来利用这块硬盘,让域用户不用登陆就可以直接使用。普通samba服务通常需要验证自己管理的用户,要使用域用户就必须加入域,接受域的权限管理。samba加域是很麻烦的事情,网上文章很多,真正能做到不出问题的估计不多。于是想到了docker,在docker hub上搜索了半天,发现能满足要求的就只有一个名叫fjudith/samba-join-ad的项目,这个项目已经4年没有维护了,在网上几乎找不到任何介绍。GitHub - fjudith/docker

2022-01-24 15:46:43 1340

原创 docker使用心得和技巧

docker使用心得和技巧。windows docker无法获取真实的IP地址的解决办法

2022-01-05 10:37:17 1223

原创 el-autocomplete组件 实现通用文本框历史数据显示

HTMLautocomplete属性可用于以文本以提供填写表单字段值的自动帮助,简单说说就是可以记忆历史数据并显示出来,可以提高输入效率。但是HTMLautocomplete属性需要下面的条件,在element ui的开发中非常不方便,必须使用form同步提交,而VUE中现代网页都使用axios来异步提交。具有name和/或id属性 成为<form>的后代 具有submit按钮的表单于是就用el-autocomplete组件+localstorage实现了...

2021-12-13 16:09:42 1544

原创 内存不够导致错误MySQL server has gone away

在mysql导入数据的时候,反复出现下面的错误ERROR 2006 (HY000) at line 21968: MySQL server has gone away或者ERROR 2013 (HY000) at line 21994: Lost connection to MySQL server during query检查了max_allowed_packet没有问题,并试着修改各种timeout时间都不起作用。仔细阅读了官方文档MySQL :: MySQL 5.6 Refe.

2021-09-28 10:36:15 257

原创 使用vscode的remote-ssh进行远程php调试

首先转载vscode的remote-ssh扩展,官方文档如下,可以参照下面进行安装https://code.visualstudio.com/docs/remote/ssh为什么需要远程开发在Visual Studio代码远程- SSH扩展允许你打开任何远程计算机,虚拟机或容器上的远程文件夹与正在运行的SSH服务器,并充分利用VS代码的功能集。一旦连接到服务器,您就可以与远程文件系统上任何位置的文件和文件夹进行交互。由于扩展直接在远程计算机上运行命令和其他扩展,因此无需在本地计算机上使用源代

2021-08-17 17:50:39 969

原创 用katalon开发爬虫程序

katalon整合了selenium和groovy,是一款强大的web测试工具。实际上katalon不仅可以写测试代码,还可以写简单的爬虫。katalon最大的优点就是整合了selen

2021-06-04 11:32:50 300

原创 域控制器丢失NETLOGON目录的解决办法

一台老的windows server 2012域控制器由于各种原因不能使用了,要迁移到新的windows server 2019服务器上。新域控制器的角色迁移我参照了下面文章https://blog.csdn.net/annita2019/article/details/89949031五个角色的全部转移,操作过程中没有出错,看起来一切正常。但是我断开老服务器后,客户端就无法登陆域,显然新服务器的域控制器没有正常工作。最后用目录服务器诊断Dcdiag /e,发现没有NETLOGON 共享..

2021-04-15 11:38:12 2733 2

原创 对比json数据的差异来实现页面上树形数据统一提交

WEB开发时,页面上的数据输入通常有下面几种类型,从简单到复杂依次有表单数据输入:一维结构表格数据输入:二维结构树状数据输入:三维以上的结构表单数据最简单,表格数据比较麻烦,树状数据比较复杂。提交方式有2种,单个提交和统一提交,树状数据统一提交则是最复杂的一种,因为你必须记录用户增删改的数据,这些数据有层级关系和时间关系。比如说下面的树状数据父1 L子1 L孙1 L子2父2 L子3画面操作:1.在子1下面添加孙22.在子2下面添加孙3...

2021-03-19 10:09:53 277

原创 用STRAIGHT_JOIN优化mysql的执行速度

优化sql的执行速度,我们通常需要查看EXPLAIN的结果,没有使用索引的加上索引,索引使用不对的也可以强制使用某个索引,但是有些情况下,这2招都不管用,是sql内部的执行顺序不正确,导致速度很慢。执行顺序通常是mysql内部优化器根据表预测的大小,索引等等情况自动判断的,但是某些情况下会判断错误,这个时候我们就需要调整执行顺序。mysql8.0以上有优化器提示(OptimizerHints),可以详细控制优化器的执行顺序,比较复杂。但是生产环境是5.6,无法使用。8.0以下可以使用STRAI.

2020-12-28 16:29:19 240

原创 清理爬虫程序的孤儿进程chromedriver和chrome

为了更好的js支持,爬虫很多使用的是无头浏览器。我们通常通过selenium的webdirver来控制无头浏览器。比如说chrome浏览器就使用chromedriver。但是这个chromedriver是个服务器,有缺陷,大规模爬虫常常导致无法无法连接,导致我们不得不抛弃chromedriver进程,最后chromedriver就变成了孤儿进程。这些孤儿太多会影响爬虫,所以必须及时清除什么是孤儿进程,我们来看看wiki的解释在类UNIX操作系统中,为避免孤儿进程退出时无法释放所占用的资源而僵

2020-11-03 16:43:16 1121 1

原创 MYSQL_ATTR_USE_BUFFERED_QUERY不能更新数据

用php更新大量数据,pdo默认会缓存数据,也就是说把数据全部读入内存后再fetch。当数据量很大的时候,会导致内存溢出。所以这种情况下,我们需要用下面的语句来禁止缓存$dbh->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY,false);但是今天发现,禁止缓存后执行update就会失败,没有找到官方文档。这种情况下,我想了一个办法,使用2个连接,一个用于无缓存读数据,一个用于有缓存写数据,这样解决了大数据更新的问题,在这里分享一下..

2020-07-01 10:47:38 2907

原创 .net父进程被终止时,自动终止子进程

做过selenium爬虫的人,一定有一个烦恼,那就是selenium会启动很多子进程,爬虫终止的时候,由于各种原因,总会有些僵尸进程(chrome,chromedriver)残留在内存,不清除这些僵尸就无法进行大规模的爬行。在网上搜索了半天,终于发现一个有用的文章https://gist.github.com/valantonini/452cf90254e50617f6273bab8...

2020-03-26 10:56:26 905

原创 网络爬虫如何获取重定向链

我们知道网页重定向有3种方式1.http重定向2.mata tag重定向3.js重定向如果用http client,可以搞定1和2,但是对于3是无能为力的。要做到js重定向必须依赖浏览器。但是selenium chromedriver并没有直接提供获取重定向链的功能,可以通过performance log来获取。不幸的是chrome最新版已经对应w3c,但是selenium chr...

2020-03-09 16:07:58 610

原创 使用jointJS自定义元素编写动态修改元素大小的控件

jointJS是一个基于svg的图形化工具库,拥有强大的功能,但是也有2个缺点1.没有中文的官方文档2.很多功能只存在于其收费版Rappid中,价格不菲动态修改元素大小这是一个非常有用功能,Rappid中有这个功能,但也些不如人意的地方,最后决定自己写一个基本思路如下1.创建一个自定义元素,可以拖动大小和位置2.把这个自定义元素绑定到其他元素,让其他元素的大小和位置与自定义...

2019-12-16 15:52:04 1329

原创 用Flask构筑微型yolo服务器

深度学习的语言一般是python,需要强大的机器配置,还有GPU,而应用程序一般是其他语言c#,java,php等等,如何把2者联系起来?我们首先想到的就是web方式,因为web跨平台,简单维护方便。Flask是一个使用 Python 编写的轻量级 Web 应用框架,简单易用著称,正好适合做服务器Flask服务器端代码from flask import Flask,request,ma...

2019-02-15 16:05:26 1827

原创 windows版TensorFlow最优安装,使用AVX2指令集

通常我们运行TensorFlow会报告如下信息,意思是你的CPU支持AVX2指令集,但TensorFlow的二进制版本没有使用2019-02-14 15:44:41.989265: I T:\src\github\tensorflow\tensorflow\core\platform\cpu_feature_guard.cc:141] Your CPU supports instruction...

2019-02-14 16:25:18 9187 6

原创 keras yolo3训练技巧以及踩过的坑

  我是在windows下安装的,虽然不推荐,但是没有机器装linux,windows用起来还是挺方便。但如果在windows下编译TensorFlow的源代码就很麻烦。下面把我遇到的各种问题和技巧与大家分享。windows环境下各软件版本的问题    具体的安装步骤就不说了,网上乱七八糟的很多,关键是TensorFlow和CUDA的要匹配,否则使用GPU就会出现各种问题        ...

2019-02-12 19:01:40 4584 3

原创 实战ssl-bump,实现squid的url过滤功能

使用代理服务器squid,想实现url过滤,禁止访问某个url,我们自然就想到了使用url_regex,可以使用正则对url进行过滤比如说我们要禁止使用百度搜索,可使用下面的过滤acl deny_url  url_regex //www\.baidu\.com/shttp_access deny deny_url但是实际运行发现这个功能对https网站不起作用,对于https网站,u...

2018-09-14 13:57:08 3743

原创 log4net动态修改文件名【正规方法】

为什么说是正规呢?是因为还有不正规的方法1.先说正规方法  输出日志前,使用log4net提供的工具log4net.Util.PatternString来进行参数替换在xml里面这样写&lt;file type="log4net.Util.PatternString" value="log\%property{fname}.log"/&gt;在c#里面这样写log4net....

2018-09-05 15:52:14 4652

原创 ChromeDriver中的PageSource返回&nbsp;的问题

由于PhantomJS停止开发,爬虫改用ChromeDriver,遇到如题问题,与大家分享。我觉得应该是ChromeDriver的问题,没有找到官方的方法,其他的driver或许也有类似问题,没有测试如果请求页面里面包含空格占位符&amp;nbsp;,PageSource不会返回&amp;nbsp;,而是返回不可见字符来代替,这样做在页面渲染的时候没有问题,但是想取得页面source的时候就会导致...

2018-05-21 16:17:21 5966

原创 递归线程池队列

注意标题里面有三个keyword,递归 线程池 队列这是我在开发爬虫程序时候碰到的需求,我们知道爬网页一般都使用广度优先搜索,每个页面下面都可能有下层页面。为了加快爬行速度,我们很容易想到用多线程来实现。但是多线程必须受控,不能无限的创建线程,这样机器受不了,服务器也受不了。所以多线程必须满足下面条件:线程数限制,超过限制则加入到队列中等待。同时,线程中允许创建新的线程,我称之为递归线程。根据这个...

2018-04-12 10:13:40 1197

原创 华容道游戏各编程语言比较

我使用各种语言来实现华容道的破解,目的是看看各个语言的编程效率以及执行时间。所有的版本都是从C#版本演变过来的,可以参见下面http://blog.csdn.net/robinspada/article/details/79354500执行时间编译性语言:还是C++最快,C#和java大概是慢在字符串的处理上,C++基本不需要处理多字节解释性语言:chrome js v8引擎比其他的快点,不过差距...

2018-03-19 17:41:23 2235

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除