于Python的自动化测试或者是爬虫开发者来说,对于selenium库想必都听说过,selenium本身是作为Web应用测试工具,但是作为爬虫工具也有很广泛的用途。
Selenium虽然好用,但是它大多数的时刻都是和Web的网页元素之间打交道,需要用到html网页的标签,CSS选择器等知识。
虽然自动化程度较高,但是使用起来仍然不是很方便,上手也不是很容易。今天,小编就带领大家来认识一款基于Selenium的库——Helium。
Helium库是基于Selenium基础上的更加高级的Web自动化工具,它能够通过网页上可以看见的标签和名称等信息来进行用户交互。我们可以用来进行点击键盘的按键、点击标签、滚动鼠标等一系列的鼠标和键盘操作。
而Helium的安装也是非常的简单,如下图所示:
大家只需要pip install Helium即可安装,但是需要注意的是,普通的安装方式会非常的慢,因此小编利用了清华镜像来帮助下载,提升下载的速度。
安装之后,我们就可以来使用Helium了,首先我们利用Helium来登录一下GitHub账号。其效果如下图所示:
上图中程序跳转到GitHub的登录界面,然后输入用户的名字和用户的密码,最后点击登录即可登录上GitHub的账号,过程很简单,我们来看一下程序是如何编写的吧。
上述的程序仅有短短的五行,而且每行的意义都非常的清晰和明确。
程序便可以直接登录。下图是对应的selenium登录GitHub的程序。
对比之下,可以看出,Helium程序是非常的简洁而且对用户非常的友好。让大家非常清楚每一步的操作。
接下来,为了更好地展示Helium的强大,小编利用Helium来自动化抓取百度图片中的妹子图片,看看我们是如何实现的吧,我们首先来介绍一下程序,并按照我们想下载百度图片的思路来看待程序。
上述程序中,左边是我们的程序索引,右面是我们的程序,我们可以按照我们提取百度图片的思路来看待程序,小编分步解释每一行代码:
上述的每一行对应着程序中每条语句的含义,这样理解起来是不是非常的方便了呢。
说实话,小编以前也用过Selenium但是总是觉得太重,使用成本很高,现在有了这个神器,做了一些封装,帮我们省了很多事情,Python就是这么有趣,内个还等啥,有兴趣的小伙伴赶紧试试吧。顺便转发+评论,小编将持续分享Python干货知识!
下截图:
点击文件选择框,我们不妨选一张尺寸比较大的图片,例如下面这种2M多的钓鱼收获照:
于是图片歘歘歘地传上去了:
此时我们点击最终上传完毕的图片地址,会发现原来2M多3000多像素宽的图片被限制为400像素宽了:
保存到本地会发现图片尺寸已经变成只有70K了:
以上就是图片前端压缩并上传demo的完整演示。
二、实现原理
要想使用JS实现图片的压缩效果,原理其实很简单,核心API就是使用canvas的drawImage()方法。
Canvas本质上就是一张位图,而drawImage()方法可以把一张大大的图片绘制在小小的Canvas画布上,不久等同于图片尺寸压缩了?
对于本案例的压缩,使用的5个参数的API方法:
context.drawImage(img, dx, dy, dWidth, dHeight);复制代码
各参数具体含义可以参见“Canvas API中文文档-drawImage”,这里不展开。
举例:
一张图片(假设图片对象是img)的原始尺寸是4000*3000,现在需要把尺寸限制为400*300大小,很简单,原理如下代码示意:
var canvas=document.createElement('canvas'); var context=canvas.getContext('2d'); canvas.width=400; canvas.height=300; // 核心JS就这个 context.drawImage(img,0,0,400,300);复制代码
把大图片画在一张小画布上,压缩就这么实现了,是不是简单的有点超乎想象。
三、如果想要上传或下载?
如果想要上传图片或者下载图片,可以使用canvas.toDataURL()或者canvas.toBlob()方法先进行转换。
1. canvas.toDataURL()
语法如下:canvas.toDataURL(mimeType, qualityArgument)复制代码
可以把画布转换成base64格式信息图像信息,纯字符的图片表示法。
其中:
mimeType表示canvas导出来的base64图片的类型,默认是png格式,也即是默认值是'image/png',我们也可以指定为jpg格式'image/jpeg'或者webp等格式。file对象中的file.type就是文件的mimeType类型,在转换时候正好可以直接拿来用(如果有file对象)。
qualityArgument表示导出的图片质量,只要导出为jpg和webp格式的时候此参数才有效果,默认值是0.92,是一个比较合理的图片质量输出参数,通常情况下,我们无需再设定。
更多关于toDataURL()方法的信息可以参见“Canvas API中文文档-toDataURL()”。
2. canvas.toBlob()方法
语法如下:canvas.toBlob(callback, mimeType, qualityArgument)复制代码
可以把画布转换成Blob文件,通常用在文件上传中,因为是二进制的,对后端更加友好。
和toDataURL()方法相比,toBlob()方法是异步的,因此多了个callback参数,这个callback回调方法默认的第一个参数就是转换好的blob文件信息,本文一开始的demo案例中的文件上传就是将canvas图片转换成二进制的blob文件,然后再ajax上传的,代码如下:
// canvas转为blob并上传 canvas.toBlob(function (blob) { // 图片ajax上传 var xhr=new XMLHttpRequest(); // 开始上传 xhr.open("POST", 'upload.php', true); xhr.send(blob); });复制代码
更多关于toBlob()方法的信息可以参见“Canvas API中文文档-toBlob()”。
一旦有了可传输的图像数据,上传下载就好实现了。例如下载前端压缩好的图片,可以参考我上一篇在掘金发布的文章:“纯JS生成并下载各种文本文件或图片”。
四、总结
经过“图片→canvas压缩→图片”三步曲,我们完成了图片前端压缩功能。
作者:张鑫旭
链接:https://juejin.im/post/5bec3c6cf265da614312a0fa
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
Query文件下载方法及引入HTML语法
去jQuery网站下载文件包,点击主页的“Download”之后,进入下载页面,可以选择production版本的进行下载,但是点击进去之后,浏览器并不会直接下载相关的文件,而是跳转到一个“密密麻麻”都是jQuery代码的页面,仔细查看浏览器地址栏中的url便可知,该页面其实就是jQuery的min版的文件,可以使用下面这种方法,下载jQuery文件:
右键点击该页面,在弹出的菜单中选择另存为,在另存为的菜单中默认保存的后缀名为".js",如果不是,可以在下拉菜单中选择该类型的选项,然后保存即可下载jQuery文件了。鄙人下载的是最新版本的jquery-3.7.1.min.js
提示:jQuery的文件的扩展名是".js",下载完之后,无需安装,使用直接引入即可使用jQuery。
jQuery是js文件,引入HTML的方法与引入JavaScript文件的方法一样,在HTML的head标签内使用script标签引入,比如:
<script src="../../static/js/jquery-3.7.1.min.js"></script>
如果不想下载jQuery,也可以通过CDN的方式,将jQuery引入HTML,比如:
<script src="http://libs.baidu.com/jquery/1.10.2/jquery.min.js" rel="external nofollow" >
</script>
下面实例将通过一个点击按钮添加文本的实例来展示jQuery的用法,如下:
<script src="../../static/js/jquery-3.7.1.min.js"></script>
<p id="p1"></p>
<button id="btn" class="btn">jQuery</button>
<script>
$('#btn').click(function(){
$('#p1').text("jQuery添加段落文本");
})
</script>
来源:笨鸟工具-璞玉天成,大器晚成
原文:jQuery下载及引入HTML | jQuery教程
免责声明:内容仅供参考,不保证正确性!
*请认真填写需求信息,我们会在24小时内与您取得联系。