Regular Expression 使用

Regular Expression

正则表达式

正则表达式引擎:DFA (Deterministic Final Automata 确定型有穷自动机)和 NFA 自动机(Non deterministic Finite Automaton 不确定型有穷自动机)

回溯陷阱(Catastrophic Backtracking)

贪婪模式、懒惰模式、独占模式

ChromeDriver 编译

准备

系统依赖

  • A 64-bit Mac running 10.14+.

  • Xcode 11+

  • The OS X 10.15 SDK. Run

    1
    ls `xcode-select -p`/Platforms/MacOSX.platform/Developer/SDKs
  • Python 2.7.16

  • Git 2.25.2

设置代理

设置终端代理

1
export https_proxy=http://127.0.0.1:7890 http_proxy=http://127.0.0.1:7890 all_proxy=socks5://127.0.0.1:7891

设置 boto 代理

1
export NO_AUTH_BOTO_CONFIG=~/.boto
1
2
3
4
[Boto]
proxy=127.0.0.1
proxy_port=7890
proxy_type=http

下载源码

下载 depot_tools 工具

新建目录

1
mkdir chromium_src && cd chromium_src

安装 depot_tools

1
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git

设置系统环境变量

1
export PATH="$PATH:${PWD}/depot_tools"

获取源码

开启

1
git config --global core.precomposeUnicode true

新建目录

1
mkdir chromium && cd chromium

获取代码

1
fetch --nohooks --no-history chromium --target_os=darwin

fetch --nohooks chromium,不要加--no-history

fetch --nohooks --no-history chromium

fetch --nohooks --no-history chromium --target_os=darwin

使用 pyenv 切换 python3 和 python2 都提示 Warning: Running gclient on Python 3

切换目录

1
cd src

检查分支

1
git fetch --tags

拉取分支并切换

1
git checkout -b xweb_66.0.3359.126 66.0.3359.126

Chrome 与 chromedriver 映射关系 https://github.com/appium/appium-chromedriver/blob/master/lib/chromedriver.js

67 使用的 macOS10.12.sdk。https://github.com/phracker/MacOSX-SDKs/releases

同步分支数据

1
gclient sync --with_branch_heads --jobs 16

gclient runhooks # 如果有提示 runhooks 成功,则不需执行。

gclient sync --force

打印日志:gclient sync –verbose –verbose –verbose

1
2
> gclient sync --force --nohooks --with_branch_heads
>

如果上面gclient sync 步骤报错需要手动下载文件,先安装 gsutil: pip install gsutil

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
cd src

gsutil cp gs://chromium-gn/a14b089cbae9c29ecbc781686ada8babac8550af buildtools/mac/gn

chmod +x buildtools/mac/gn

gsutil cp gs://chromium-clang-format/0679b295e2ce2fce7919d1e8d003e497475f24a3 buildtools/mac/clang-format

gsutil cp gs://chromium-luci/ffb6a624bd14abdff34618fe97562b34350199f7 tools/luci-go/mac64/isolate

gsutil cp gs://chromium-nodejs/8.9.1/c52ee3605efb50ae391bdbe547fb385f39c5a7a9 third_party/node/mac/node-darwin-x64.tar.gz

gsutil cp gs://v8-wasm-fuzzer/f6b95b7dd8300efa84b6382f16cfcae4ec9fa108 v8/test/fuzzer/wasm_corpus.tar.gz

gsutil cp gs://chromium-nodejs/050c85d20f7cedd7f5c39533c1ba89dcdfa56a08 third_party/node/node_modules.tar.gz

生成 args.gn 文件

1
gn gen --args="is_debug=false is_component_build = false symbol_level = 0" out/Release

文件内容:out/Release/args.gn

1
2
3
4
5
6
# Release
is_debug = false
# 不构建许多 dylib 文件
is_component_build = false
# 不要符号表,不用在 gdb 里面调试。
symbol_level = 0

编译 chromedriver

1
ninja -C out/Release chromedriver

修改代码

webview

1
2
3
chromium/src/chrome/device_manager.cc

std::string pattern = base::StringPrintf("@webview_devtools_remote_.*%d", pid);

命令行入参

1
chromium/src/chrome/test/chromedriver/server/chromedriver_server.cc

参考

Checking out and building Chromium for Mac

Mac本地编译chromedriver

本地编译 chromedriver 历程记录 · TesterHome

idb 使用

idb

idb is a flexible command line interface for automating iOS simulators and devices

安装

  1. 安装依赖 grpc
1
brew tap grpc/grpc && brew install grpc
  1. 安装 idb-companion
1
brew tap facebook/fb && brew install idb-companion
  1. 安装 idb-client

    要求 Python 3.6 +

1
pip install fb-idb

使用

启动一个 companion

1
idb_companion --udid F52D0B40-46D4-4B62-8AB5-8CADBF5C6E66

连接设备

1
idb connect 0B33F35A-3164-4C3D-9650-1672D0FE1B67

Idb connect host port

查看设备信息

1
idb describe

查看设备列表

1
idb list-targets

启动设备

1
idb boot --udid F52D0B40-46D4-4B62-8AB5-8CADBF5C6E66

查看 app 列表

1
idb list-apps

安装 app

1
idb install test.ipa

.app or .ipa

卸载 app

1
idb uninstall com.apple.Maps

启动 app

1
idb launch --udid F52D0B40-46D4-4B62-8AB5-8CADBF5C6E66 com.apple.Maps

关闭 app

1
idb terminate com.apple.Maps

截图

1
idb screenshot pic.png

录屏

1
idb record video --udid F52D0B40-46D4-4B62-8AB5-8CADBF5C6E66 video.mp4

查看日志

1
idb log --udid F52D0B40-46D4-4B62-8AB5-8CADBF5C6E66

查看测试列表

1
idb xctest list

参考

facebook/idb: idb is a flexible command line interface for automating iOS simulators and devices

Docker Zookeeper 配置

Zookeeper

1
docker pull zookeeper:3.5.6
1
docker run -d --name zookeeper-3.5.6 -p 2181:2181 -p 28080:8080 -p 2888:2888 -p 3888:3888 -v ~/docker/zookeeper/zoo.cfg:/conf/zoo.cfg zookeeper:3.5.6

macOS 配置 Java 环境

使用 jenv 管理 Java 多版本环境

1
brew install jenv

设置环境变量

1
2
echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(jenv init -)"' >> ~/.zshrc

检查状态

1
jenv doctor

查看系统已安装的 JDK

1
/usr/libexec/java_home -V

添加 Java 版本到 jenv

1
jenv add /Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home

删除版本

1
jenv remove 1.8

查看所有添加到 jenv 的 Java 版本

1
jenv versions

查看 Java 版本

1
java -version

参考

jenv/jenv: Manage your Java environment

Mac OS X JAVA多版本并存 - 阿泰的菜园

在OS X中使用jEnv管理多个Java版本 - Rain-driven Development

,