系统环境为CentOS Linux release 7.9.2009 (Core) 最小安装,考虑到playwright的安装需要 python3.7+
,本次直接选择安装python3.8。
方法1-yum安装
## 升级libstdc++
cd /opt
yum -y install wget
wget http://www.vuln.cn/wp-content/uploads/2019/08/libstdc.so_.6.0.26.zip
unzip libstdc.so_.6.0.26.zip
find /usr -name "libstdc++.so.*"
ll /usr/lib64/libstdc++.so.6
mv -f /usr/lib64/libstdc++.so.6 /usr/lib64/libstdc++.so.6.bak
cp -f /opt/libstdc++.so.6.0.26 /usr/lib64/
ln -sfv /usr/lib64/libstdc++.so.6.0.26 /usr/lib64/libstdc++.so.6
## 下载 devtoolset-8
yum -y install centos-release-scl
yum -y install devtoolset-8*
rpm -ivh http://mirror.centos.org/centos/7/extras/x86_64/Packages/centos-release-scl-rh-2-3.el7.centos.noarch.rpm
yum -y install devtoolset-8-runtime
yum -y install devtoolset-8
# 启用工具
scl enable devtoolset-8 bash
# 安装GCC-8
yum -y install devtoolset-8-gcc devtoolset-8-gcc-c++ devtoolset-8-binutils bison
# 直接替换旧的gcc
旧的gcc是运行的/usr/bin/gcc
mv -f /usr/bin/gcc /usr/bin/gcc-4.8.5
cp -f /opt/rh/devtoolset-8/root/bin/gcc /usr/bin/gcc
mv -f /usr/bin/g++ /usr/bin/g++-4.8.5
cp -f /opt/rh/devtoolset-8/root/bin/g++ /usr/bin/g++
gcc --version
g++ --version
方法2-源码构建
# 安装必要依赖
yum install -y gcc-c++ libstdc++-static ant cmake byacc flex automake libtool binutils-devel bison ncurses-devel gcc kernel-devel libtool libatomic libcurl-devel texinfo
yum install -y wget bzip2
## 下载并解压缩 GCC
# GCC 下载站点
https://gcc.gnu.org/pub/gcc/
# 进入安装文件目录
cd /opt
# 下载 GCC
# 此处如果下载高于10版,则会在编译的时候提示GCC版本过低,陷入死循环。10.5.0是10版的Last版
# 此版本生成 libstdc++.so.6.0.28
wget https://gcc.gnu.org/pub/gcc/releases/gcc-10.5.0/gcc-10.5.0.tar.gz
# 解压缩 GCC
tar -xzvf gcc-10.5.0.tar.gz
# 修改 GCC 目录名 (个人习惯)
cd /opt/gcc-10.5.0
# 查看 GCC 依赖需求
cat ./contrib/download_prerequisites | tail -n +29 | head -n 8
# 下载依赖库
./contrib/download_prerequisites
## 编译安装GCC
# 创建 编译用临时目录
mkdir build && cd build
# 配置 GCC 编译
../configure --enable-bootstrap --enable-languages=c,c++ --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib
# 编译 GCC,非常耗费时间,耐心等待吧......,成功后会安装在/usr/local/lib64目录下
make -j4
# 会出现错误:
#/usr/include/gnu/stubs.h:7:11: fatal error: gnu/stubs-32.h: No such file or directory
# 7 | # include
#需要安装: glibc-devel.i686
yum install -y glibc-devel.i686
make -j4
make install
# 手工删除旧版本GCC
# 查看libstdc++.so
find /usr -name "libstdc++.so*"
mkdir -p /root/temp/backup/gcc485
mv -f /usr/bin/gcc /root/temp/backup/gcc485
mv -f /usr/bin/g++ /root/temp/backup/gcc485
mv -f /usr/bin/c++ /root/temp/backup/gcc485
mv -f /usr/bin/cc /root/temp/backup/gcc485
mv -f /usr/lib64/libstdc++.so.6.0.19 /root/temp/backup/gcc485/
# 安装 GCC
cp -f /usr/local/bin/gcc /usr/bin/gcc
cp -f /usr/local/bin/g++ /usr/bin/g++
cp -f /usr/local/bin/c++ /usr/bin/c++
cp -f /usr/local/bin/gcc /usr/bin/cc
cp -f /usr/local/lib64/libstdc++.so.6.0.28 /usr/lib64
ln -sfv /usr/lib64/libstdc++.so.6.0.28 /usr/lib64/libstdc++.so.6
# 查询 当前 GCC 版本
gcc --version
cd /opt
wget http://ftp.gnu.org/gnu/make/make-4.3.tar.gz
tar -xzvf make-4.3.tar.gz
cd /opt/make-4.3/
#安装到指定目录
./configure --prefix=/usr/local/make
make && make install
# 创建软链接
mv /usr/bin/make /usr/bin/make.bak
ln -sfv /usr/local/make/bin/make /usr/bin/make
make --version
## 下载并解压 glibc-2.28
cd /opt
wget http://ftp.gnu.org/gnu/glibc/glibc-2.28.tar.gz
tar -xzvf glibc-2.28.tar.gz
cd glibc-2.28
## 创建临时文件
mkdir build && cd build
## --disable-werror 参数很关键
../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin --disable-werror
make
make install
strings /lib64/libc.so.6 | grep GLIBC
echo "LANG=en_US.UTF-8" > /etc/environment
echo "LC_ALL=" >> /etc/environment
source /etc/environment
localedef -v -c -i en_US -f UTF-8 en_US.UTF-8
Centos 7操作系统上默认安装了python 2.7.5版本,但是python 2即将成为历史,python 3才是未来的主流,本文记录了笔者在Centos 7上安装python 3.8的过程
# 下载并解压
cd /opt
wget --no-check-certificate https://www.openssl.org/source/openssl-1.1.1w.tar.gz
tar -zxvf openssl-1.1.1w.tar.gz
# 指定安装路径并编译
cd /opt/openssl-1.1.1
./config --prefix=/usr/local/openssl
make
make install
# 替换当前系统的旧版本 openssl 「先保存原来的」
mv -f /usr/bin/openssl /usr/bin/openssl.old
mv -f /usr/lib64/openssl /usr/lib64/openssl.old
mv -f /usr/lib64/libssl.so /usr/lib64/libssl.so.old
ln -sfv /usr/local/openssl/bin/openssl /usr/bin/openssl
ln -sfv /usr/local/openssl/include/openssl /usr/include/openssl
ln -sfv /usr/local/openssl/lib/libssl.so /usr/lib64/libssl.so
echo "/usr/local/openssl/lib" >> /etc/ld.so.conf
# 建立动态链接
ldconfig -v
使用如下命令下载python 3.8:
wget https://www.python.org/ftp/python/3.8.0/Python-3.8.0.tgz
通过以下命令解压缩下载的文件:
cd /opt
tar zxvf Python-3.8.0.tgz
解压后进入Python-3.8.0目录:
cd /opt/Python-3.8.0
因为编译 Python 源代码需要依赖于很多工具,所以得先准备一下,依次执行以下命令:
rm -f /var/lib/rpm/__db*
rpm --rebuilddb
yum update -y
yum groupinstall -y 'Development Tools'
yum install -y gcc openssl-devel bzip2-devel libffi-devel
现在我们就可以安装python 3.8了,首先执行以下命令(注意,一定要在Python-3.8.0目录下执行该命令):
cd /opt/Python-3.8.0
./configure --prefix=/usr/local/python3 --enable-optimizations --with-openssl=/usr/local/openssl
注意:
--prefix
选项是配置安装的路径,如果不配置该选项,安装后可执行文件默认放在/usr/local/bin
,库文件默认放在/usr/local/lib
,
配置文件默认放在/usr/local/etc
,其它的资源文件放在/usr/local/share
,比较凌乱.如果配置
--prefix
,如:./configure --prefix=/usr/local/python3
可以把所有资源文件放在/usr/local/python3
的路径中,不会杂乱.用了--prefix
选项的另一个好处是卸载软件或移植软件.当某个安装的软件不再需要时,只须简单的删除该安装目录,就可以把软件卸载得干干净净;移植软件只需拷贝整个目录到另外一个相同的操作系统机器即可.当然要卸载程序,也可以在原来的make 目录下用一次make uninstall
,但前提是make文件指定过uninstall.
--with-openssl
加上openssl包编译,否则pip install组件的时候,会无法下载https的组件
./configure
命令执行完毕之后创建一个文件 Makefile, 供下面的make命令使用,执行make install
之后就会把程序安装到我们指定的文件夹中去.
make
make install
那么现在就安装好python 3了吗?很遗憾,答案是没有.因为系统默认使用的还是python 2.
我们首先查看一下 Python 可执行文件的位置:
which python
然后切换到相应的目录:
cd /usr/bin
查看相关的python信息:
ls -la python*
发现当我们执行 python
命令时,系统指向python 2,然后python 2指向python 2.7,所以系统默认使用的python版本仍然是python 2.
首先将python 改名为 python.bak
mv -f python python2.bak
再次查看python相关信息:
进入目录 /usr/bin
,查看有关yum的文件:
ls -la yum*
使用 vi
进入文本编辑器(如果有多个yum配置文件,都要进去修改):
vi yum
点击i进入编辑模式之后将 #!/usr/bin/python
改为 #!/usr/bin/python2
,按ESC退出编辑模式,输入 :wq!
保存修改退出.
同样进入文件 /usr/libexec/urlgrabber-ext-down
做同样修改.
进入 /usr/bin
目录,配置软链接.在我看来,其实软链接就像Windows操作系统里的快捷方式,比如现在桌面上有一个图标叫python,现在你双击打开它,发现它打开的是Python 2,所以我们要配置其指向python 3.
ln -sfv /usr/local/python3/bin/python3.8 /usr/bin/python
ln -sfv /usr/local/python3/bin/pip3.8 /usr/bin/pip
输入 python --version
和 pip -V
,查看
yum -y install libXcomposite libXtst gtk3 atk at-spi2-atk cups-libs libxkbcommon libXdamage libXrandr mesa-libgbm alsa-lib-devel
yum -y install fontconfig
yum -y install cjkuni-ukai-fonts cjkuni-uming-fonts
fc-cache -fv
rm -rf ~/.cache/ms-playwright/
pip install playwright -i https://pypi.tuna.tsinghua.edu.cn/simple
python -m playwright install
vi /opt/test_playwright.py
# 导入
from playwright.sync_api import Playwright, sync_playwright
# 创建浏览器
def run (playwright: Playwright) -> None:
# 创建浏览器
browser = playwright.chromium.launch(headless=True)
# 使用 selenium 如果要打开多个网页,需要创建多个浏览器,但是 playwright 中只需要创建多个上下文即可
# 例如:content1 = browser.new_context()、content2 = browser.new_context() 分别去访问网页做处理
content = browser.new_context()
# 每个 content 就是一个会话窗口,可以创建自己的页面,也就是浏览器上的 tab 栏,在每个会话窗口中,可以创建多个页面,也就是多个 tab 栏
# 例如:page1 = content.new_page()、page2 = content.new_page() 封面去访问页面
page = content.new_page()
# 页面打开指定网址
page.goto('https://www.baidu.com')
print(page.title())
page.screenshot(path="screenshot.png",full_page=True)
# page.wait_for_timeout(1000)
# 使用完成关闭上下文(也就是会话窗口)
content.close()
# 关闭浏览器
browser.close()
# 调用
with sync_playwright() as playwright:
run(playwright)
运行测试:
python /opt/test_playwright.py
<<完毕>>