Chromeheadless安装与使用

Python Selenium Headless:以 Headless 模式打开 Chrome 浏览器 本篇文章介绍了如何在 Python 中使用 Selenium 运行浏览器无头模式。 阅读详情

  如果是小规模爬虫或模拟效果要求不高的话,使用Selenium HtmlUniDriver基本可以满足需求。但HtmlUnitDriver是基于JS模拟浏览器原理,存在许多浏览器可以做,但它其实无法操作的功能,比如截图等高级功能。

  之前爬虫使用Phantomjs,感觉效果还不错,而且使用方便。Phantomjs可以设置远程模式,方便本地调试;方便设置代理,但这里有一个坑,就是代理地址不能是https协议,不然会出问题。但Phantomjs已经目前已经停止更新与维护,而且Google Chrome推出了Headless版本,使用浏览器模式更加符合真是的环境。

安装采坑

  Chrome Headless安装没有想象中的简单。刚开始直接通过安装包或添加Chrome源安装均失败,失败的原因是存在各种各样的依赖包。后来找到的Chrome安装的一个脚本,使用这个脚本能够不断地安装缺少的依赖包,从而能够安航成功。

安装系统

Centos6.9 Final

安装方式一:通过添加chrome源来安装chrome

## 添加Chrome源
[google]
name=Google – i386
baseurl=http://dl.google.com/linux/rpm/stable/i386
enabled=1
gpgcheck=1
gpgkey=https://dl-ssl.google.com/linux/linux_signing_key.pub

64位系统:
[google64]
name=Google – x86_64
baseurl=http://dl.google.com/linux/rpm/stable/x86_64
enabled=1
gpgcheck=1
gpgkey=https://dl-ssl.google.com/linux/linux_signing_key.pub

## 安装
1.sudo yum install google-chrome-stable 来安装最新稳定版
2.sudo yum install google-chrome-unstable 最新版chrome

这里有个问题,可能是博主使用的Centos环境有问题。通过此方式安装之后存在各种依赖问题,导致无法安装成功。

安装方式二:下载安装

## Ubuntu系统安装,此方式通过修改URL路径,适用于Centos
sudo apt-get install libxss1 libappindicator1 libindicator7
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo dpkg -i google-chrome-stable_current_amd64.deb
sudo apt-get install -f

跟上面一种方式一样, 存在各种依赖问题,导致无法安装成功。

使用脚本安装

curl https://intoli.com/install-google-chrome.sh | bash

  通过上网查阅发现https://intoli.com这个网站是专门从事headless browsers使用简化,提供云服务的一家公司。其中在该公司的博客中,可以看到许多关于Google Chrome的文章。

  该公司提供的这个脚本,能够自动查找相关依赖,并安装。这样我们就不必担心依赖问题,导致无法安装成功。

使用进阶

  安装Chrome Headless之后,就可以直接使用了。不过这里有一个注意的点,那就是需要安装ChromeDriver这个东东。

## 下载
wget https://chromedriver.storage.googleapis.com/2.40/chromedriver_linux64.zip

## 解压
tar xvf chromedriver_linux64.zip

## 权限
chmod 755 chromedriver

初级使用

  初级使用的目标是可以运行起来,不报错,能够完成预期的目标。
代码如下:

    /**
     * @desc main method
     * @param args
     * @throws IOException
     */
    public static void main(String[] args) throws IOException {

        String driverPath = "/root/chrome/chromedriver";
        String targetURL = "";

        System.setProperty("webdriver.chrome.driver", driverPath);
        ChromeDriver driver = getDriver();

        // 对网页内容作处理
        Document doc = getDocument(targetURL);

        // 如果对网页做操作,直接使用Driver

    }

    /**
     * @desc get chrome driver
     */
    public static ChromeDriver getDriver() {

        String userAgent = AppForum.getAgents();
        ChromeOptions options = new ChromeOptions();
        options.setBinary("/usr/bin/google-chrome-stable");
        options.addArguments("--no-sandbox", "--test-type","--headless", "--disable-gpu");

        DesiredCapabilities capabilities = DesiredCapabilities.chrome();
        capabilities.setCapability(ChromeOptions.CAPABILITY, options);
        capabilities.setJavascriptEnabled(true);

        ChromeDriver driver = new ChromeDriver(capabilities);
        driver.manage().timeouts().setScriptTimeout(5, TimeUnit.SECONDS);

        return driver;
    }

    /**
     * @desc crawler html content
     * @param url
     */
    public static Document getDocument(String url) {

        ChromeDriver driver = getDriver();
        Document doc = null;
        try {
            driver.get(url);
            doc = Jsoup.parse(driver.getPageSource());
        } catch (Exception e) {
        } finally {
            try {
                driver.quit();
            } catch (Exception e) {
            }
        }

        return doc;
    }

中阶使用

中阶也即提高级,主要区别是开发研究一些重要的功能,比如时候网速、加载速度等内容
1. 禁止图片加载
2. 等待加载
3. 使用UserAgent代理
4. 禁止一些选项的加载
5. 使用Driver执行特定JS等

代码如下:

    /**
     * @desc main method
     * @param args
     * @throws IOException
     */
    public static void main(String[] args) throws IOException {

        String driverPath = "/root/chrome/chromedriver";
        String targetURL = "";

        System.setProperty("webdriver.chrome.driver", driverPath);
        ChromeDriver driver = getDriver();

        // 对网页内容作处理
        Document doc = getDocument(targetURL);

        // 如果对网页做操作,直接使用Driver
        // 执行JS:滚动效果
        driver.executeScript("scrollTo(0,10000)");

        // 等待加载示例
        // 1. 超时加载等待
        driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);

        // 2. 等待加载组件
        WebDriverWait wait = new WebDriverWait(driver, 20);
        wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector(".red_box")));

    }

    /**
     * @desc get chrome driver
     */
    public static ChromeDriver getDriver() {

        HashMap<String, Object> prefs = new HashMap<String, Object>();
        prefs.put("profile.default_content_settings", 2);
        prefs.put("profile.default_content_setting_values", 2);
        prefs.put("profile.managed_default_content_settings.images", 2);

        String userAgent = AppForum.getAgents();
        ChromeOptions options = new ChromeOptions();
        options.setBinary("/usr/bin/google-chrome-stable");
        options.setExperimentalOption("prefs", prefs);
        options.addArguments("--user-agent=" + userAgent,"--no-sandbox", "--test-type");
        options.addArguments("--disable-infobars", "--headless", "--disable-gpu","--enable-strict-powerful-feature-restrictions");
        options.addArguments("--disable-plugins", "--disable-images", "--start-maximized");

        DesiredCapabilities capabilities = DesiredCapabilities.chrome();
        capabilities.setCapability(ChromeOptions.CAPABILITY, options);
        capabilities.setJavascriptEnabled(true);

        return new ChromeDriver(capabilities);
    }

    /**
     * @desc crawler html content
     * @param url
     */
    public static Document getDocument(String url) {

        ChromeDriver driver = getDriver();
        Document doc = null;
        try {
            driver.get(url);
            doc = Jsoup.parse(driver.getPageSource());
        } catch (Exception e) {
        } finally {
            try {
                driver.quit();
                driver.close();
            } catch (Exception e) {
            }
        }

        return doc;
    }

高级使用

设置代理服务器

  代理服务器的设置,可以参考Google-chrome的帮助信息,在代码层面很容易实现。

Google-chrome帮助信息

Driver生命周期

  在我们的代码中“new ChromeDriver()”的时候,产生了多个外部进程,如下所示

root      8508  8499  1 04:26 ?        00:00:01 /usr/bin/google-chrome-stable --disable-background-networking --disable-client-side-phishing-detection --disable-default-apps --disable-gpu --disable-hang-monitor --disable-images --disable-infobars --disable-plugins --disable-popup-blocking --disable-prompt-on-repost --disable-sync --disable-web-resources --enable-automation --enable-logging --enable-strict-powerful-feature-restrictions --force-fieldtrials=SiteIsolationExtensions/Control --headless --ignore-certificate-errors --load-extension=/tmp/.org.chromium.Chromium.7tAd3h/internal --log-level=0 --metrics-recording-only --no-first-run --no-sandbox --password-store=basic --remote-debugging-port=0 --start-maximized --test-type --use-mock-keychain --user-agent=Mozilla/4.0 (compatible;MSIE7.0;WindowsNT5.1;Trident/4.0;SE2.XMetaSr1.0;SE2.XMetaSr1.0;.NETCLR2.0.50727;SE2.XMetaSr1.0) --user-data-dir=/tmp/.org.chromium.Chromium.4Sd7ob data:,
root      8515  8508  0 04:26 ?        00:00:00 /opt/google/chrome/chrome --type=zygote --no-sandbox --enable-logging --headless --log-level=0 --headless --user-agent=Mozilla/4.0 (compatible;MSIE7.0;WindowsNT5.1;Trident/4.0;SE2.XMetaSr1.0;SE2.XMetaSr1.0;.NETCLR2.0.50727;SE2.XMetaSr1.0) --enable-crash-reporter
root      8539  8508  0 04:26 ?        00:00:00 /opt/google/chrome/chrome --type=gpu-process --enable-logging --headless --log-level=0 --no-sandbox --headless --user-agent=Mozilla/4.0 (compatible;MSIE7.0;WindowsNT5.1;Trident/4.0;SE2.XMetaSr1.0;SE2.XMetaSr1.0;.NETCLR2.0.50727;SE2.XMetaSr1.0) --enable-crash-reporter --gpu-preferences=KAAAAAAAAACAAACAAQAAAAAAAAAAAGAAEAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAA --use-gl=swiftshader-webgl --override-use-software-gl-for-tests --headless --user-agent=Mozilla/4.0 (compatible;MSIE7.0;WindowsNT5.1;Trident/4.0;SE2.XMetaSr1.0;SE2.XMetaSr1.0;.NETCLR2.0.50727;SE2.XMetaSr1.0) --enable-crash-reporter --enable-logging --log-level=0 --service-request-channel-token=84633B7AB3844DE44C0ADE5922EAFCB4
root      8551  8515  9 04:26 ?        00:00:12 /opt/google/chrome/chrome --type=renderer --enable-automation --enable-logging --log-level=0 --no-sandbox --test-type --use-gl=swiftshader-webgl --disable-gpu-compositing --service-pipe-token=0D2C2CC1CF67A5903FDFECE210FEB597 --lang=en-US --headless --user-agent=Mozilla/4.0 (compatible;MSIE7.0;WindowsNT5.1;Trident/4.0;SE2.XMetaSr1.0;SE2.XMetaSr1.0;.NETCLR2.0.50727;SE2.XMetaSr1.0) --enable-crash-reporter --num-raster-threads=1 --service-request-channel-token=0D2C2CC1CF67A5903FDFECE210FEB597 --renderer-client-id=4 --shared-files=v8_context_snapshot_data:100,v8_natives_data:101

可以看出其中只有一个Google-chrome浏览器的进程,其余三个是对应ChromeDriver的进程。这些进程实际上是通过系统层面来管理,我们的程序无法直接去操作进程的状态,比如Kill/Shutdown等,因此需要格外主要这些进程的生命周期。

  如果我们的程序正常退出或意外推出了,这些进程有可能还存在于系统当中,占有一定资源,一般来说这些进程占有的资源从50MB-300MB之间,甚至更多。保留在系统中的这些进程,最终会成为”僵尸”进程,不退出也不释放资源。

  一种简单粗暴的做法是,在系统中启动一个crontab任务,定期清理超过一定时间的chrome进程:

## 执行脚本:这里设置的阈值为5分钟
#!/bin/bash
## check PID's process time

function show_elapsed_time()
{
 user_hz=$(getconf CLK_TCK)
 pid=$1
 jiffies=$(cat /proc/$pid/stat | cut -d" " -f22)
 sys_uptime=$(cat /proc/uptime | cut -d" " -f1)
 last_time=$(( ${sys_uptime%.*} - $jiffies/$user_hz ))
 if [ $last_time -gt 600 ] ; then
    echo "kill process : $pid"
    kill -9 $pid
 fi
 echo "the process $pid lasts for $last_time seconds."
}

echo ""
echo `date "+%Y-%m-%d %H:%M:%S"`
for item in `ps -ef | grep "google-chrome" | grep -v grep | awk '{print $2}' `;
do  
    echo "PID: $item"
    show_elapsed_time $item
done;

## crontab命令
*/1 * * * * sh /root/chrome/check.sh >> /root/chrome/logs.txt

  如果是正常退出,或者能够检测到ShutdownHook,可以在ShutdownHook里面全部Kill外部的Chrome进程:

Runtime.getRuntime.addShutdownHook(new Thread(){
    public void run(){
        // 执行脚本,获取外部Chrome进程PID
        // 通过PID,KILL进程
        // 这里需要用到JNA:
        //<dependency>
        //  <groupId>net.java.dev.jna</groupId>
        //  <artifactId>jna</artifactId>
        //</dependency>

    }
});

Tab使用

  这里还有一个优化的点就是,是不是考虑使用tab标签页来完成每个URL,不需要每次都产生一个Chrome对象,减少程序开支。

如何使用ChromeHeadLess 技术实现后台对前台页面截屏 如何使用ChromeHeadLess 技术实现后台对前台页面截屏1 chrome headless1.1 什么是chrome headless1.2 chrome headless的作用1.3 chrome headless和PhantomJs的对比2 使用chrome headless在服务端实现对页面截图2.1 下载ChromeDriver2.2 引入selenium-server-stand... 阅读详情

相关推荐

Golang爬虫-HeadlessChrome

Headless Chrome安装与使用 Headless Chrome 是 Chrome 浏览器的无界面形态,可以在不打开浏览器的前提下,使用所有 Chrome 支持的特性运行你的程序。相比于现代浏览器,Headless Chrome 更加方便测试 web 应用,获得网站的截图,做爬虫抓取信息等。 安装 对于RobotBug而言Headless Chrome以一个公共资源,可以被其他服务所使用。 docker install chromedp/headless-shell docker run -d -p

qq_17818281的博客 2401

python selenium 处理弹窗_python 让selenium(webdriver ) 不打开浏览器(弹出窗口)运行(静默模式启动)...

什么是 Headless ChromeHeadless Chrome 是 Chrome 浏览器的无界面形态,可以在不打开浏览器的前提下,使用所有 Chrome 支持的特性运行你的程序。相比于现代浏览器,Headless Chrome 更加方便测试 web 应用,获得网站的截图,做爬虫抓取信息等。相比于较早的 PhantomJS,SlimerJS 等,Headless Chrome 则更加贴近浏览器...

weixin_39973518的博客 2202

用友U8库龄分析避坑指南:物料出入库日期计算的5个常见错误

本文深入剖析了在用友U8系统中进行库龄分析时,物料出入库日期计算的五个常见陷阱。从数据源选择、业务类型过滤、计价方式逻辑、期初数据处理到查询性能优化,逐一解析错误根源并提供避坑指南,帮助企业获得准确的库龄数据,有效管理库存与资金风险。

weixin_29209801的博客 455

chromedriver的无界面(headless)模式及使用代理

在我们使用Selenium驱动ChromeDriver时,可以弹出谷歌浏览器,模拟人为操作谷歌浏览器,这就是自动化测试。虽然很厉害,但是也有一个很现实的问题,因为是要真实加载完整网页,导致效率低。在自动化测试时,我们其实只需要知道是测试完成还是未完成,至于能否看到完整的UI对我们来说是不重要的,那Headless Chrome就是谷歌为此类需求定制的无UI浏览器,因为 UI 需要 CPU 和 RAM 开销,所以Headless Chrome会快很多。先说下演示环境:OS:Mac。

顺其自然~专栏 3210

从实验室到生产线:Qwen3-Omni后训练技术在实际业务中的落地挑战

本文探讨了Qwen3-Omni后训练技术在实际业务中的落地挑战,重点分析了多模态AI在工业应用中的关键问题与解决方案。通过金融风控、跨境电商等场景案例,揭示了通用模型与垂直需求的矛盾,并提供了知识蒸馏、语音合成优化等实战经验,助力企业实现技术到业务的转化。

weixin_29035147的博客 267

ESP32C3的I2S接口详解:以驱动PCM5102A为例,避开时序与配置的那些坑

本文深入解析ESP32C3的I2S接口驱动PCM5102A DAC的完整解决方案,涵盖时序对齐、PCB优化和寄存器级配置。通过实际案例分享时钟树分析、信号完整性设计和底层调试技巧,帮助开发者避开常见陷阱,实现高质量音频输出。重点探讨了I2S协议栈、电源滤波优化及DMA传输异常处理等关键技术要点。

weixin_30254435的博客 299

linux 安装ChromeHeadless

下载并安装Google Chrome浏览器。 打开终端并输入以下命令安装Chrome Headless:sudo apt-getinstall -y chromium-browser 使用以下命令启动Chrome Headless:google-chrome--headless --disable-gpu --remote-debugging-port=9222 https://www.ex...

weixin_42577735的博客 910

STM32裸机开发基础:寄存器直接操作详解

寄存器是微控制器内部的特殊存储单元,直接与硬件电路连接,用于控制和监视硬件功能。与普通内存不同,寄存器的每一位(bit)通常都有特定的硬件含义。寄存器就是机器的控制面板上的各种开关和指示灯每个开关控制一个具体功能(如打开LED、启动通信)每个指示灯显示一个具体状态(如数据接收完成、错误发生)// GPIO引脚定义1。

2401_88760782的博客 2187

linux yum 安装ChromeHeadless

首先确保系统已经安装了 yum 包管理器。然后使用以下命令安装 ChromeHeadless: yuminstall chrome-headless 在安装完成后,您可以使用以下命令来运行 ChromeHeadless: chrome-headless 注意: ChromeHeadless 可能需要其他的依赖项, 请确保安装完全 。 ...

weixin_35756637的博客 273

STM32F4的sct文件理解

原文地址http://blog.sina.com.cn/s/blog_898f36590100ya2l.html ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~...

weixin_34008805的博客 995

2024届数字IC秋招-华为机试-数字芯片-笔试真题和答案(五)(含2022年和2023年)

此部分包含华为机试真题,方向是数字芯片,内容详细包括设计、验证、后端等,大部分题目给出参考答案。华为机试都是从题库里抽题目,所以这些题目还是很有参考性的,甚至是完全一样,可以搜到的。(题目内容较多,将分开编写几个文章)

qq_42135020的博客 2083

cannot start chromeheadless

sudo yum install gtk3

Martin 的博客 371

控制科学与工程(自动化)保研经验【2】——南开、同济篇

禁止转载 1、南开人工智能学院夏令营   保研之旅第一个夏令营就是南开,南开夏令营非常早(6月份),当时我们专业仅有两人入营。夏令营前一天我们两个坐高铁来到了天津,几经辗转来到了南开的津南校区,非常偏僻。在自己找的酒店住了一晚,第二天一早去学院报到,资格审查、报销路费等等,然后开营仪式,吃饭,入住酒店,实验室参观。   开营仪式和实验室参观了解到,南开人工智能学院是国内第一批人工智能学院,和很多高...

Control Everything 6532

windows先配置chromedriver,使用ChromeHeadless进行自动化处理

一、什么是ChromeHeadless     顾名思义,这是谷歌出的一款类似于PhantomJS的无头游览器。可以在不打开游览器的条件下,进行游览器操作。而且现在好像selenium不在支持PhantomJS了,所以转战ChromeHeadless。 二.怎么用ChromeHeadless(windows) 1.查看自己PC的chrome游览器的版本。     我的是68版。 ...

HunterYoung0718的博客 4970

项目介绍 MATLAB实现基于LSTM-XGBoost长短期记忆网络(LSTM)结合极端梯度提升(XGBoost)进行多变量时序预测的详细项目实例(含模型描述及部分示例代码)

本项目基于MATLAB平台,实现LSTM-XGBoost混合模型进行多变量时序预测。通过LSTM网络自动提取时序特征,结合XGBoost强大的回归能力,有效解决多变量时序数据的高维复杂性、长短期依赖捕捉等难题。项目包含完整的数据预处理流程、模型构建与训练方法,以及性能评估指标。提供的GUI界面支持参数调整、训练监控和结果可视化,适用于能源、金融、气象等多领域预测任务。配套代码详细注释,便于理解模型实现细节,为时序预测研究提供实用参考框架。

优质创作者: 人工智能技术领域 对于有一定基础的 MATLAB和Python带具体需求都可以详谈 MATLAB和Python可以提供代码调试服务加油 谢谢 你的鼓励是我前行的动力 谢谢支持 加油 谢谢 101

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Python Selenium - 在无图形Linux机器上使用selenium的几种方案

研究爬虫的时候,用到了chrome headless,于是想到PhantomJS停止维护了,headless Chrome能否完全替代PhantomJS,是否需要其他的驱动安装呢?做了一些简单的实验并记录一下在无图形Linux机器上使用selenium的集中方案。在无图形的Linux机器上使用selenium运行自动化用例,将能够节约资源和执行时间。1) 可以将大量自动化用例串行发布到多台精简的L...

Summer Law的博客 1万+

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Python爬虫---selenium基本使用(支持无界面浏览器PhantomJS和Chrome handless)

使用urllib.request.urlopen()模拟浏览器有时候获取不到数据,所以使用selenium(1) selenium是一个用于web应用程序测试的工具(2) selenium 测试直接运行在浏览器中,就像真正的用户在操作一样(3) 支持通过各种driver (FirfoxDriver,IternetExplorerDriver,OperaDriver, ChromeDriver) 驱动真实浏览器完成测试。(4) selenium也是支持无界面浏览器操作的。

weixin_52053631的博客 3153

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Python爬虫知识体系-----Selenium

【代码】Python爬虫知识体系-----Selenium。

殷志鹏的博客 1857

Python爬虫_04_Selenium_Phantomjs_Chrome handless_ Selenium新版本语法案例

Selenium 1.什么是selenium? (1)Selenium是一个用于Web应用程序测试的工具。 (2)Selenium 测试直接运行在浏览器中,就像真正的用户在操作一样。 (3)支持通过各种driver(FirfoxDriver,IternetExplorerDriver,OperaDriver,ChromeDriver)驱动 真实浏览器完成测试。 (4)selenium也是支持无界面浏览器操作的。 2.为什么使用selenium? 模拟浏览器功能,自动执行网页中的js代码,实现动态加载 3

小先生编程 2132

【Chrome】使用k8s、docker部署无头浏览器Headless,Java调用示例

无头浏览器是一种没有图形用户界面的浏览器。无头浏览器不通过其图形用户界面(GUI)控制浏览器的操作,而是使用命令行。

Java技术栈,分享不断学习、不断超越、不断积累的历程! 5330

爬虫之Selenium,Phantomjs,Chrome handless

爬虫之Selenium,Phantomjs,Chrome handless,反爬技术

天天学安全专属博客 659

python尚硅谷爬虫Selenium

Python尚硅谷爬虫selenium模块

i_kun_的博客 1122

Jenkins 集成 Robot Framework 自动化测试

​ 访问 Phantomjs ,找到 Download phantomjs-2.1.1-linux-x86_64.tar.bz2 的下载链接,并拷贝。 ​

软件测试技术交流分享 443

linux自动启动chrome,使用 Headless Chrome 进行自动化测试

如果你想使用 Headless Chrome 进行自动化测试,那么就往下!这篇文章将让你完全使用 Karma 作为运行器runner,并且使用 Mocha+Chai 来编撰测试。这些东西是什么?Karma、Mocha、Chai、Headless Chrome,哦,我的天哪!Karma是一个测试工具,可以和所有最流行的测试框架(Jasmine、Mocha、QUnit)配合使用。Chai是一个断...

weixin_26800111的博客 629

Python爬虫——Selenium

折磨到顶点的折磨,selenium,phantomjs,Chrome handless

WenJGo的博客 2117

windows下配置chromedriver

在使用Selenium 和PhantomJS进行爬虫过程中发现: selenium最新版本已经不支持phantomJS,需要使用headless 一、什么是ChromeHeadless 顾名思义,这是谷歌出的一款类似于PhantomJS的无头游览器。可以在不打开游览器的条件下,进行游览器操作。而且现在好像selenium不在支持PhantomJS了,所以转战Chrome...

dengyidan1042的博客 221
上一篇: Alibaba DataX调研使用
下一篇: Hive相关的两个疑问[一]
大数据运维
博客等级 码龄18年 26粉丝 62原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值