- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
主要区别在于,基于GUI和非GUI(Headless)执行。
我正在寻找所有Headless浏览器之间的差异,但是很遗憾,我没有找到任何差异。我一个接一个地经历,这使我更加困惑。如果有人可以分享具有差异的简短信息,那就太好了,这很清楚。
最佳答案
浏览器
Browser是一个应用程序,提供了一种查看和与万维网上的所有信息进行交互的方式。从技术上讲,Browser(或者称为Web浏览器或Internet浏览器)是一种客户端程序,该客户端程序使用HTTP(超文本传输协议)来代表浏览器用户对Internet上的Web服务器进行请求。
无头浏览器
无头浏览器也是Web浏览器,但没有图形用户界面(GUI),但可以通过编程方式进行控制,可以广泛用于自动化,测试和其他目的。
为什么要使用无头浏览器?
使用无头浏览器有很多优点和缺点。使用无头浏览器对于浏览Web可能不是很有帮助,但是对于自动化任务和测试来说却很棒。
无头浏览器的优势
使用无头浏览器有很多优点。一些tham如下:
使用无头浏览器的绝对优势是它们通常比真实的浏览器快。之所以要更快,是因为我们没有启动浏览器GUI,并且可以绕开真实浏览器加载CSS,JavaScript以及打开和呈现HTML DOM所花费的所有时间。
在性能方面,使用无头浏览器通常可以将性能提高2到15倍。
使用Scraping Websites时,您不必一定要手动启动网站。因此,您可以无忧无虑地访问网站,而只需抓取HTML。您无需渲染完整浏览器即可。
许多开发人员使用无头浏览器来对其网站和移动应用程序的代码更改进行单元测试。能够从命令行执行所有这些操作而无需手动刷新或启动浏览器,可以为他们节省很多精力。
当您可能不想使用无头浏览器时
有多种原因导致您选择使用Real Browser而不是Headless Browser的原因。几个实例:
您需要模仿真实用户。
您需要直观地查看测试运行。
如果您需要进行大量调试,那么无头调试可能会很困难。
哪种无头浏览器更好?
正如您正确指出的那样...主要区别在于在GUI基和非GUI基(无头)上的执行...,因此从测试角度看,很多情况将取决于任何特定浏览器在幕后实现的Browser Engine 。例如,以下是一些浏览器引擎,它们可以完全呈现网页或在虚拟DOM中运行JavaScript。
Chromium Embedded Framework:CEF是一个基于Google Chromium项目的开源项目,具有JavaScript支持和BSD许可证。
Erik:Erik是Kanna和WebKit之上的无头浏览器,具有Swift支持和MIT许可证。
jBrowserDriver:jBrowserDriver是一个与Selenium兼容的Headless浏览器,它基于WebKit,并通过Java绑定支持和Apache License v2.0许可证与Selenium Server一起使用。
PhantomJS:PhantomJS是一个无头WebKit,可使用JavaScript API编写脚本。它具有对各种Web标准的快速本机支持:DOM处理,CSS选择器,JSON,Canvas和SVG,以及JavaScript,Python,Ruby,Java,C#,Haskell,Objective-C,Perl,PHP和R(通过Selenium )支持和BSD 3-条款许可。
Splash:Splash是具有HTTP API的javascript呈现服务。这是一个带有HTTP API的轻量级浏览器,使用Twisted和QT在Python中实现了几乎所有的laungage绑定技术和BSD 3-Clause许可证。
您可以在Which drivers support “no-browser”/“headless” testing?中找到相关的讨论
关于selenium - headless (headless)浏览器在自动化方面的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53083952/
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 5 年前。 Improve t
背景 我有一个 Azure Runbook(名为 RunStoredProcedure2),定义如下: param( [parameter(Mandatory=$True)] [string] $Sq
我有一个名为“团队”的表,其中包含“非事件”列,另一个表“事件”,其中包含“时间”列。如果任何团队的“事件”中的最新日期发生在 X 时间之前,如何将“非事件”列更新(为 true)? 我知道这可以通过
下面的问题可能有点令人困惑,但我会尽力以最好的方式解释它。 假设我们为一家制造公司工作。它制造然后用于制造产品的组件。在以下示例中,有 3 个组件和 2 个最终产品。 组件和产品的需求如下: comp
我有代码可以让我在一个范围内选择一个项目: COleVariant vItems = cstrAddr; hr = AutoWrap(
我正在开发一个应用程序,该应用程序有 4 种语言的大约 50 个应用内购买,这给了我很多表单和子表单、框和子框,需要使用 iTunesConnect 的令人痛苦且设计糟糕的表单来填充。 我想知道是否有
我想在 Azure 自动化中使用 powershell 脚本来安排打开/关闭资源。 我想在不创建帐户的情况下执行此操作,因为我们的域强制重置密码。我知道自动化帐户会创建一个证书 - 当使用资源管理器(
我尝试从 azure 自动化 run book power shell 自动检索 azure SQL 数据库中的数据。我发现azure自动化帐户的模块中缺少SQL Server模块。我已经导入了该模块
我正在自动化 Outlook,并且需要控制电子邮件的发件人身份。用户将在 Outlook 中设置两个或多个帐户,我需要能够选择从哪个帐户发送电子邮件。有什么想法吗? 需要 Outlook 2003 及
我尝试从 azure 自动化 run book power shell 自动检索 azure SQL 数据库中的数据。我发现azure自动化帐户的模块中缺少SQL Server模块。我已经导入了该模块
假设我有一个网站,我可以(随时)登录并每隔 x 小时提交数据(单击登录后可见的链接),我将如何自动化此过程? 我构建了一个图形用户界面,它为用户(现在是我,为了我自己的方便)提供了一个包含一些信息的界
我正在开发一个程序,它的任务是我们为它定义一些号码(我们的一些手机号码)并且它应该在 Telegram 中注册它们,然后获取发送到该号码的所有消息。如您所知,在 Telegram 中注册需要提供电话号
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 3 年前。 Improve this qu
最近我在处理 CSS Sprite 。一切正常。 我创建了一个 sprite、.css 文件和 html 结构。看起来像 .sprites{ background-image:url
我想为一款名为 Dune 2000 的策略游戏创建一个叠加层。令人讨厌的是,要创建 10 个士兵,每次完成一个都必须单击该图标。没有队列。因此,在不干扰游戏运行方式的情况下,我想听听鼠标移动的声音,当
我是 python 的初学者,我想从自动化开始。以下是我正在尝试执行的任务。 ssh -p 2024 root@10.54.3.32 root@10.54.3.32's password: 我尝试通过
当我将一些 urlencoded Javascript 粘贴到 Firefox 和 Chrome 上的 URL 时,我看到了一些奇怪的事情发生。是否可以使用此技术告诉 Chrome 访问 URL,然后
我需要将大量请求自动提交到基于云的数据库接口(interface) (Intelex)。没有任何方法可以批量提交某些操作,但是提交单个请求所必需的只是让经过身份验证的用户尝试打开 Web 链接。因此,
假设我有一个进程的内存转储。我想对其运行报告,所以基本上我想打开 WinDBG,加载 SOS 并运行一个脚本,该脚本运行一些命令,解析输出,然后基于此运行更多命令。 除了像 SendKeys 这样的
我正在使用 ffmpeg 创建视频剪辑。我想自动化该过程并保存剪辑,而无需手动为要保存的每个文件命名。这是我拥有的代码。它将创建并保存剪辑,但只能使用扩展名和不是名字。 @echo off cd /d
我是一名优秀的程序员,十分优秀!