在 网络爬虫 的技术中,使用 selenium
、 pyppeteer
、puppeteer
等已经是很常见的了。但有一个问题厂家对无头浏览器的检测严重。
很多时候对无头浏览器进行伪装
并不是那么容易,有很多的反爬手段进行检测。这里有一些 无头浏览器 伪装与检测的手段,下面这篇文章可以给我们一些参考。
如何用JavaScript检测出当前浏览器是否是无头浏览器(headless browser)
如果迟迟不能通过无头浏览器环境的环境检测,可以尝试直接在浏览器的界面模式下运行。
我目前就是遇到无头浏览器无法正常运行的情况,但是我的云服务器资源很宝贵,只有 1 核 1 G
;
说实话,在这么少的资源安装上桌面系统还能不能正常开机我也不确定,所以要找一个轻量级的桌面系统,经过查询,Xfce 桌面系统是比较轻量级的,符合我的要求。
与其他一些桌面系统(如KDE和GNOME)相比,Xfce占用的内存和CPU使用量非常小。在我的系统中,组成Xfce桌面的程序为如此强大的桌面占用了很小的内存。非常低的CPU使用率也是Xfce桌面的一个标志。由于内存占用这么少,Xfce也非常节省CPU周期,这一点我并不感到特别惊讶。
一、centos7 安装桌面系统 xfce
Linux系统在服务器上一般都直接最小化安装,是不安装图形界面的,这里我们在最小化安装的基础上安装桌面环境。
- 安装epel源,升级软件、包、系统
sudo yum install epel-release
sudo yum update
- 安装图形界面(GUI)
sudo yum groupinstall "X window system"
- 安装Xfce桌面环境
sudo yum groupinstall Xfce
- 注意:Centos7 中没有安装中文字体,安装好Xfce,直接进入会出现乱码。所以先安装中文字体,防止进入Xfce出现中文乱码
- 安装中文字体
- 文泉驿字体
yum list | grep wqy
sudo yum install wqy*
- cjkuni字体
yum list | grep cjkuni
sudo yum install cjkuni*
最好两种字体都安装
- 修改默认启动方式为图形化界面
sudo systemctl set-default graphical.target
备注:修改默认启动方式为命令模式 systemctl set-default multi-user.target
到现在为止,我们的桌面环境已经安装好了,然后我们换一种登陆模式。
二、远程登陆 centos7 桌面系统
在平时我们登陆 linux 主机,一般都是采用ssh
模式,使用ssh
可以直接在终端上进行复制粘贴,响应迅速,优点很多。但是ssh
是纯文本的,无法显示界面,如果我们要为登陆 Linux 的界面模式,最好是使用 VNC
登陆。
目前我使用的腾讯云是自带 VNC
登陆的,如下
如果你是使用的腾讯云、阿里云这类的云主机,可以找一找官方提供的
VNC
登陆通道。
如果你当前的 Linux 没有VNC
登陆通道,则需要自己安装VNC
服务,如下:
1) 检查自己是否已经安装了VNC
服务
rpm -qa|grep tigervnc
已经安装的会显示 tigervnc
相关内容,如下
[root@VM_0_3_centos ~]# rpm -qa|grep tigervnc
tigervnc-server-minimal-1.8.0-13.el7.x86_64
tigervnc-license-1.8.0-13.el7.noarch
[root@VM_0_3_centos ~]#
没有安装的则什么都不会显示
[root@localhost ~]# rpm -qa|grep tigervnc
[root@localhost ~]#
2) yum命令安装
yum -y install tigervnc-server
它会自动给你下载依赖包,如果你的yum命令不能使用,建议用如下命令:
echo nameserver 8.8.8.8 >> /etc/resolv.conf
然后在用yum命令即可。
3) 启动vnc服务
- 命令行启动
使用vncserver
命令启动VNC
服务,命令格式为"vncserver :桌面号"
,其中"桌面号"用"数字"的方式表示,每个用户连个需要占用1个桌面
启动编号为1
的桌面命令如下:
vncserver :1
(注意vncserver与:之间有空格)
以上命令执行的过程中,因为是第一次执行,需要输入密码,这个密码被加密保存在用户主目录下的.vnc子目录(/root/.vnc/passwd)中;同时在用户主目录下的.vnc子目录中为用户自动建立xstartup配置文件(/root/.vnc/xstartup),在每次启动VNC服务时,都会读取该文件中的配置信息。另外需注意的是这里设置的密码就是后面我们用vncserver客户端工具连接时要输入的密码
。
[root@centos-7 ~]# vncserver :1
A VNC server is already running as :1
You will require a password to access your desktops.
Password:
Verify:
Would you like to enter a view-only password (y/n)? n
A view-only password is not used
New 'centos-7.shared:2 (root)' desktop is centos-7.shared:2
Creating default startup script /root/.vnc/xstartup
Creating default config /root/.vnc/config
Starting applications specified in /root/.vnc/xstartup
Log file is /root/.vnc/centos-7.shared:2.log
[root@centos-7 ~]#
/root/.vnc/
目录下还有一个“主机名:1.pid
”文件,这个文件记录着启动VNC后对应后面操作系统的进程号,用于停止VNC服务时准确定位进程号。
这样vnc
服务端就启动成功了(桌面1),这里是用root用户执行的vncserver :1
命令,则启动后用vncserver
客户端连接进入到该服务器的用户就是root用户。
这样通过命令启动的 VNC
服务是临时的,每次重启都需要重新输入,那么可以写进配置文件
- 配置文件启动
在这里我们配置两个VNC
启动桌面,桌面 1 具有root
用户权限,桌面 2 是普通用户
权限 -
root
用户
复制一份配置文件出来
cp /lib/systemd/system/[email protected] /etc/systemd/system/vncserver@:1.service
修改刚刚的配置文件
vim /etc/systemd/system/vncserver@:1.service
修改 43、44 两行
配置 USER
为 root
配置/home/
为当前用户的 HOME地址,也就是 /root/
ExecStart=/usr/sbin/runuser -l -c "/usr/bin/vncserver %i"
PIDFile=/home//.vnc/%H%i.pid
修改后
ExecStart=/usr/sbin/runuser -l root -c "/usr/bin/vncserver %i"
PIDFile=/root/.vnc/%H%i.pid
设置 vnc 登陆密码:(注意,这里我们需要切换到 root 用户下执行vncpasswd
, 同理,如果我们再添加一个普通用户权限的桌面,则需要切换到普通用户下执行)
vncpasswd
4 )VPS常用操作命令:
vncserver :1
启动桌面 1
vncserver -list
列出当前开启的 vnc
服务,以及端口,例如:
[root@localhost ~]# vncserver -list
TigerVNC server sessions:
X DISPLAY # PROCESS ID
:1 16605
vncserver -kill 1
关闭桌面 1
netstat -tulpn | grep vnc
查看VNC相关端口
oot@localhost ~]# netstat -tulpn | grep vnc
tcp 0 0 0.0.0.0:5901 0.0.0.0:* LISTEN 16605/Xvnc
tcp 0 0 0.0.0.0:6001 0.0.0.0:* LISTEN 16605/Xvnc
tcp6 0 0 :::5901 :::* LISTEN 16605/Xvnc
tcp6 0 0 :::6001 :::* LISTEN 16605/Xvnc
如果你的 linux 版本 不同,那么可以使用
vncserver man
来查看相关操作命令。
[root@localhost ~]# vncserver man
usage: vncserver [:] [-name ] [-depth ]
[-geometry x]
[-pixelformat rgbNNN|bgrNNN]
[-fp ]
[-cc ]
[-fg]
[-autokill]
[-noxstartup]
[-xstartup ]
...
vncserver -kill
vncserver -list
[root@localhost ~]#
其中第一行 usage: vncserver [:
就是设置开启 vncserver 服务,这里我们将 number
设置为 1
,其它的采用默认。