Selenium + Chrome带配置项启动

简介: Selenium + Chrome带配置项启动

Selenium + Chrome带配置项启动


在使用Selenium进行自动化时,WebDriver启动的浏览器(这里以Chrome为例)是一个纯净的、不带Chrome扩展的实例。而我们常常会对浏览器有些特殊的需求,就需要对WebDriver添加启动参数。本文主要介绍:


  • Chrome的配置项及其在Selenium-WebDriver中的配置方法
  • 为Selenium-WebDriver配置Chrome专用用户的方案


配置方法


在Selenium的其它语言实现,比如Java、Python中,Chrome配置由ChromeOptions类控制,但在JavaScript中,使用的是selenium-webdriver/chrome中的Options类,具体的实现如下:


使用Option添加配置


首先如果没有配置启动参数时,WebDriver调用的写法如下:

require('chromedriver');
const { Builder } = require('selenium-webdriver');
driver = new Builder().forBrowser('chrome').build();

如果我们需要Chrome以最大化的状态启动,需要添加--start-maximized启动参数,可以使用Option.addArguments()方法添加参数。

require('chromedriver');
const { Builder } = require('selenium-webdriver');
const { Options } = require('selenium-webdriver/chrome');
let options = new Options();
options.addArguments('--start-maximized');
driver = new Builder().setChromeOptions(options).forBrowser('chrome').build();


如果还想隐身模式启动浏览器,这就要使用--incognito启动参数,在driver实例化前给options加上这一条参数即可:


options.addArguments('--incognito');


常用配置项


Chrome的配置项非常多,添加启动参数属于比较简单的配置,另外还可以配置浏览器的功能和偏好(Preference)、可执行文件路径、代理等。


常用启动参数


可以配置的启动参数非常多,完整版的可以访问此网站。但是这里我们只列举常用的一些参数。

options.addArguments('--user-data-dir=[path]') //  设置用户数据文件夹
options.addArguments('--headless') //  无头模式
options.addArguments('--disable-gpu') //  禁用GPU加速
options.addArguments('--start-maximized')// 浏览器最大化
options.addArguments('--window-size=1280x1024') //  设置浏览器分辨率(窗口大小)
options.addArguments('log-level=3') //  日志记录级别
// info(default) = 0
// warning = 1
// LOG_ERROR = 2
// LOG_FATAL = 3
options.addArguments('--user-agent=""') //  设置请求头的User-Agent
options.addArguments('--incognito') //  隐身模式(无痕模式)
options.addArguments('--hide-scrollbars') //  隐藏滚动条, 应对一些特殊页面
options.addArguments('--disable-javascript') //  禁用javascript
options.addArguments('--blink-settings=imagesEnabled=false') //  不加载图片, 提升速度
/*--已废弃--*/
options.addArguments('--disable-infobars') //  禁用浏览器正在被自动测试程序控制的提示

禁用Chrome受到自动测试程序控制提示的参数由于被恶意滥用在某次变更中移除了。


添加扩展


使用Option.addExtension(path)方法给浏览器增加扩展程序,path为扩展程序的.crx文件的路径。在浏览器启动时会自动安装添加的扩展。


为Selenium自动化配置一套浏览器


在用Selenium写Web自动化时,可能会因为WebDriver每次都是重启一个全新的干净浏览器而烦恼,可能会导致每次在业务测试脚本开始前先执行一大段配置脚本(比如登录、注册等等)。而如果让WebDriver不要每次都启动一个干净的浏览器而是启动一个跟平时使用没有区别、带用户数据的浏览器,就可以在执行业务测试时,使用已有的cookie或者保持住登录状态,来避免反复的配置操作。


下面介绍如何让WebDriver用上用户数据。


直接使用默认用户启动浏览器


事实上,在常用启动参数一节我们在第一行就介绍了配置用户数据的参数,即--user-data-dir=[path],只要指定到Chrome安装目录下的User Data文件夹,即可打开平时使用的那一套浏览器。添加配置的代码如下:


options.addArguments('--user-data-dir=C:\\Users\\username\\AppData\\Local\\Google\\Chrome\\User Data');

其中的username请替换为实际的用户的Windows登录名,以使上面的路径指向正确的已有路径。接着启动WebDriver即可看到一套熟悉的、与平时使用一样的浏览器启动。当然更多时候你只会看到一串如下的报错:

(node:14272) UnhandledPromiseRejectionWarning: InvalidArgumentError: invalid argument: user data directory is already in use, please specify a unique value for --user-data-dir argument, or don't use --user-data-dir

这通常是因为后台已经有一个浏览器实例正在使用该用户数据文件夹,这会导致读写冲突。但这其实只是因为你已经开了一个浏览器,而两个浏览器使用了同一个用户数据文件夹;或者后台仍有相关的进程在使用该用户数据(Chrome为了保证运行速度会在后台保持浏览器扩展,而扩展使用了用户数据)。因此可能需要用将这些Chrome进程结束掉,才能成功启动,这非常的麻烦,当然下面提供了另外一种方案,可以比较好的解决这个问题。


使用新增用户启动浏览器


在上一节中,报错的原因是因为有另一个实例占用了用户数据文件夹,因此我们只要另起一个用户数据文件夹——也就是新建一个浏览器用户,具体的方法如下:


新增用户


  1. 在计算机上打开 Chrome。


  1. 点击右上角的“个人资料”。
  2. 点击管理用户。
  3. 点击添加用户。
  4. 选择名称和照片。
  5. 点击保存。系统会打开一个新窗口,并要求您开启同步功能,这里不需要打开。


这个时候可以再访问原来的用户数据文件夹,即C:\\Users\\username\\AppData\\Local\\Google\\Chrome\\User Data,可以看到目录下出现了新的名为Profile 1的文件夹(数字具体是几取决于你创建过几个账号)。


使用新增的用户数据文件夹


我们将WebDriver启动的数据文件夹改到新增的用户数据路径,即C:\\Users\\username\\AppData\\Local\\Google\\Chrome\\User Data\\Profile 1,接着启动就可以看到打开了一个新的浏览器。


但是你一定注意到了,这里右上角“个人资料”仍然是空的,而不是刚刚新增用户的时候设定的头像。这是因为Chrome在从命令行第一次启动的时候,会自动的在当前的用户数据文件夹下创建\Default文件夹并使用,因此使用的仍然会是一个空的用户。所幸这并不影响WebDriver保存用户数据。


可以在地址栏中访问chrome://version查看,个人资料路径一栏的路径为C:\\Users\\username\\AppData\\Local\\Google\\Chrome\\User Data\\Profile 1\\Default。 这时你也会发现浏览器在启动后、执行操作前的停留时间变长了,这是因为浏览器是先打开再加载用户数据的,因此会比较费时。也是因为这个原因WebDriver每次都打开纯净的浏览器来保证运行速度。


检查是否能保存浏览数据


接着便可以让WebDriver正常使用用户数据了,例如可以访问GitHub把自己的账号登录上去,接着之后再打开就都可以看到保持登录在登录中状态了。


这个方法也可以有效的隔离用户数据,以Github举例,你可能有个自己的账号,但还有另外一个测试账号。在原来的情况,可能需要经常在Github上切换账号,但是现在就不需要了,两个账号的登录状态保存在不同的用户数据文件夹中,不会产生任何冲突。


如何手动打开新增的用户浏览器


研究了桌面上的Chrome快捷方式以后,就能注意到,启动特定用户Chrome的命令就是"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --profile-directory="Profile1"。而WebDriver刚刚启动的其实是Profile下新创建的Default用户,因此我们将命令改为"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --profile-directory="Profile1\Default"即可。当然也可以直接在快捷方式里面把目标改成上面这个命令。

相关文章
|
6月前
|
Web App开发 Python
Python使用selenium的Chrome下载文件报错解决
Python使用selenium的Chrome下载文件报错解决
229 0
|
6月前
|
Web App开发 Python
python+selenium+Chrome 监测文件是否下载完毕
python+selenium+Chrome 监测文件是否下载完毕
209 0
|
Web App开发 测试技术
Selenium+python之隐藏浏览器的“Chrome正在受到自动软件的控制“提示语
Selenium+python之隐藏浏览器的“Chrome正在受到自动软件的控制“提示语
456 0
|
4月前
|
Web App开发 数据采集 移动开发
提升Selenium在Chrome上的HTML5视频捕获效果的五个方法
在Selenium中优化Chrome的HTML5视频捕获涉及更新Chrome和ChromeDriver、配置浏览器选项、使用代理IP、调整加载策略及确保安装了正确编解码器。例如,更新驱动程序,添加如`--autoplay-policy`和`--proxy-server`的命令行参数,使用代理以防止被封,设置页面加载策略为'eager',并安装必要的编解码器来确保视频播放。代码示例展示了如何集成这些优化措施。
157 2
提升Selenium在Chrome上的HTML5视频捕获效果的五个方法
|
6月前
|
Web App开发 安全 Java
《手把手教你》系列技巧篇(七)-java+ selenium自动化测试-宏哥带你全方位吊打Chrome启动过程(详细教程)
【2月更文挑战第16天】本文介绍了如何通过查看源码理解Selenium启动Chrome浏览器的过程。首先,展示了启动Chrome的Java代码,包括设置系统属性、创建WebDriver实例、最大化窗口、设置隐性等待、打开网站、获取页面标题以及关闭浏览器。文章还讲解了包(package)、import导入、setProperty设置系统属性、WebDriver接口、driver实例、manage方法、get方法加载网页以及quit方法退出浏览器的基本概念和作用。适合没有Java基础的读者了解Selenium与Java的交互方式。
110 3
|
6月前
|
Web App开发 人工智能 Java
Python Selenium实现自动化测试及Chrome驱动使用
Python Selenium实现自动化测试及Chrome驱动使用
181 2
|
Web App开发 Python
Selenium Python 更改 chrome 默认下载目录
关于使用Selenium和Python无法更改Google Chrome默认下载目录的可能问题和解决方法,按照以上步骤,你应该能够成功使用Selenium和Python更改Google Chrome的默认下载目录。
342 0
|
Web App开发 JavaScript 前端开发
如何使用Selenium自动化Chrome浏览器进行Javascript内容的数据挖掘和分析?
数据挖掘和分析是当今互联网时代的重要技能,它可以帮助我们从海量的信息中提取有价值的知识,为我们的决策和行动提供支持。但是,有些网站的内容是通过Javascript动态生成的,这就给数据挖掘和分析带来了一定的难度。如何才能有效地获取和处理这些Javascript内容呢?本文将介绍一种简单而强大的方法,就是使用Selenium自动化Chrome浏览器进行Javascript内容的数据挖掘和分析。
135 0
如何使用Selenium自动化Chrome浏览器进行Javascript内容的数据挖掘和分析?
|
Web App开发 Java Apache
如何在Selenium自动化Chrome浏览器中模拟用户行为和交互?
Selenium是一个用于自动化Web应用程序测试的工具,它可以模拟真实的用户在浏览器中进行各种操作,如点击、输入、滚动等。Selenium支持多种浏览器,如Chrome、Firefox、Edge等,但是每种浏览器都需要相应的驱动程序才能与Selenium进行通信。本文将介绍如何在Selenium中使用Chrome浏览器,并且设置代理服务器来避免被目标网站识别。
472 0
如何在Selenium自动化Chrome浏览器中模拟用户行为和交互?
|
Web App开发 数据采集 JavaScript
Selenium Chrome Webdriver 如何获取 Youtube 悬停文本
Youtube 是一个非常流行的视频分享平台,有时候我们可能想要爬取一些视频的信息,比如标题、播放量、点赞数等。但是有些信息并不是直接显示在网页上的,而是需要我们将鼠标悬停在某个元素上才能看到,比如视频的时长、上传时间等。这些信息被称为悬停文本,它们是通过 JavaScript 动态生成的,所以我们不能用普通的 HTML 解析方法来获取它们。那么,我们该如何用爬虫来获取 Youtube 的悬停文本呢?本文将介绍一种方法,使用 Selenium Chrome Webdriver 来模拟浏览器操作,获取 Youtube 的悬停文本。
186 0
Selenium Chrome Webdriver 如何获取 Youtube 悬停文本

热门文章

最新文章