当 cdc_ 修改时,Chromedriver 在 Apple Silicon 上被杀死
Chromedriver killed on Apple Silicon when cdc_ modified
我运行遇到一个问题,在我将 Chromedriver 修改为不被网站检测为机器人后,它会在启动时立即死亡。
为了在我的银行网站上访问我的数据,我构建了一个基于 java 的工具,该工具使用 Selenium 和 Chromedriver。我的银行正在使用一些机器人检测软件,所以如果你只是 运行 常规的 chromedriver,你会被检测到并且会抛出一个一般错误。在我的旧 Intel Mac 上,为了解决这个问题,我只需 运行 这个命令,一切都会起作用:
perl -pi -e 's/cdc_/dog_/g' `which chromedriver`
当我 运行 在我的 Apple Silicon Mac 上执行此操作时,chromedriver 在启动时立即被杀死
╭─ motopascyyy@mbp2022 ➜ ~
➜ perl -pi -e 's/cdc_/dog_/g' `which chromedriver`
╭─ motopascyyy@mbp2022 ➜ ~
➜ chromedriver
[1] 16612 killed chromedriver
如果我使用 perl -pi -e 's/dog_/cdc_/g' /path/to/chromedriver
恢复命令,它将再次启动 运行ning。
╭─ motopascyyy@mbp2022 ➜ ~
137 x perl -pi -e 's/dog_/cdc_/g' `which chromedriver`
╭─ motopascyyy@mbp2022 ➜ ~
➜ chromedriver
Starting ChromeDriver 101.0.4951.41 (93c720db8323b3ec10d056025ab95c23a31997c9-refs/branch-heads/4951@{#904}) on port 9515
Only local connections are allowed.
Please see https://chromedriver.chromium.org/security-considerations for suggestions on keeping ChromeDriver safe.
ChromeDriver was started successfully.
根据对几个不同线程的建议,我更改了 perl 命令以查找 $cdc_
而不是 $dog_
,虽然 chromedriver 仍会启动,但机器人检测逻辑不会没用。
chromedriver修改前后对比了一下,没有发现大的区别(Intel和Appel Silicon看起来都一样)
63464c63464
< var key = '$cdc_asdjflasutopfhvcZLmcfl_';
---
> var key = '$dog_asdjflasutopfhvcZLmcfl_';
63504c63504
< const Symbol = window.cdc_adoQpoasnfa76pfcZLmcfl_Symbol || window.Symbol;
---
> const Symbol = window.dog_adoQpoasnfa76pfcZLmcfl_Symbol || window.Symbol;
63531c63531
< const Array = window.cdc_adoQpoasnfa76pfcZLmcfl_Array || window.Array;
---
> const Array = window.dog_adoQpoasnfa76pfcZLmcfl_Array || window.Array;
63688c63688
< const Promise = window.cdc_adoQpoasnfa76pfcZLmcfl_Promise || window.Promise;
---
> const Promise = window.dog_adoQpoasnfa76pfcZLmcfl_Promise || window.Promise;
63757c63757
< const Promise = window.cdc_adoQpoasnfa76pfcZLmcfl_Promise || window.Promise;
---
> const Promise = window.dog_adoQpoasnfa76pfcZLmcfl_Promise || window.Promise;
63829c63829
< const Promise = window.cdc_adoQpoasnfa76pfcZLmcfl_Promise || window.Promise;
---
> const Promise = window.dog_adoQpoasnfa76pfcZLmcfl_Promise || window.Promise;
有没有其他人遇到过类似的问题?
编辑 2022-05-09
我查看了控制台,似乎 运行ning perl 命令修改了包足以使代码签名无效。根据控制台,进程被杀死是因为:
Exception Type: EXC_BAD_ACCESS (SIGKILL (Code Signature Invalid))
不清楚为什么这在 Intel 机器上不是问题。
做了一些 google-ing 并且可以删除旧签名并强制使用“ad-hoc”签名。之后,chromedriver 就可以运行供个人使用了。
perl -pi -e 's/cdc_/dog_/g' /path/to/chromedriver
codesign --remove-signature /path/to/chromedriver
codesign --force --deep -s - /path/to/chromedriver
这会修改可执行文件、删除签名并添加新签名。以下是我收集这些命令的链接:
https://eclecticlight.co/2020/11/03/code-signatures-3-fixing-signature-problems/
https://www.purebasic.fr/english/viewtopic.php?t=78137
今天刚买的M1遇到了同样的问题,我一直在原地转圈。我买了那个M1 Powerbook来开发爬虫作业,所以我很沮丧。感谢您让我了解 M1 代码签名要求。
我运行遇到一个问题,在我将 Chromedriver 修改为不被网站检测为机器人后,它会在启动时立即死亡。
为了在我的银行网站上访问我的数据,我构建了一个基于 java 的工具,该工具使用 Selenium 和 Chromedriver。我的银行正在使用一些机器人检测软件,所以如果你只是 运行 常规的 chromedriver,你会被检测到并且会抛出一个一般错误。在我的旧 Intel Mac 上,为了解决这个问题,我只需 运行 这个命令,一切都会起作用:
perl -pi -e 's/cdc_/dog_/g' `which chromedriver`
当我 运行 在我的 Apple Silicon Mac 上执行此操作时,chromedriver 在启动时立即被杀死
╭─ motopascyyy@mbp2022 ➜ ~
➜ perl -pi -e 's/cdc_/dog_/g' `which chromedriver`
╭─ motopascyyy@mbp2022 ➜ ~
➜ chromedriver
[1] 16612 killed chromedriver
如果我使用 perl -pi -e 's/dog_/cdc_/g' /path/to/chromedriver
恢复命令,它将再次启动 运行ning。
╭─ motopascyyy@mbp2022 ➜ ~
137 x perl -pi -e 's/dog_/cdc_/g' `which chromedriver`
╭─ motopascyyy@mbp2022 ➜ ~
➜ chromedriver
Starting ChromeDriver 101.0.4951.41 (93c720db8323b3ec10d056025ab95c23a31997c9-refs/branch-heads/4951@{#904}) on port 9515
Only local connections are allowed.
Please see https://chromedriver.chromium.org/security-considerations for suggestions on keeping ChromeDriver safe.
ChromeDriver was started successfully.
根据对几个不同线程的建议,我更改了 perl 命令以查找 $cdc_
而不是 $dog_
,虽然 chromedriver 仍会启动,但机器人检测逻辑不会没用。
chromedriver修改前后对比了一下,没有发现大的区别(Intel和Appel Silicon看起来都一样)
63464c63464
< var key = '$cdc_asdjflasutopfhvcZLmcfl_';
---
> var key = '$dog_asdjflasutopfhvcZLmcfl_';
63504c63504
< const Symbol = window.cdc_adoQpoasnfa76pfcZLmcfl_Symbol || window.Symbol;
---
> const Symbol = window.dog_adoQpoasnfa76pfcZLmcfl_Symbol || window.Symbol;
63531c63531
< const Array = window.cdc_adoQpoasnfa76pfcZLmcfl_Array || window.Array;
---
> const Array = window.dog_adoQpoasnfa76pfcZLmcfl_Array || window.Array;
63688c63688
< const Promise = window.cdc_adoQpoasnfa76pfcZLmcfl_Promise || window.Promise;
---
> const Promise = window.dog_adoQpoasnfa76pfcZLmcfl_Promise || window.Promise;
63757c63757
< const Promise = window.cdc_adoQpoasnfa76pfcZLmcfl_Promise || window.Promise;
---
> const Promise = window.dog_adoQpoasnfa76pfcZLmcfl_Promise || window.Promise;
63829c63829
< const Promise = window.cdc_adoQpoasnfa76pfcZLmcfl_Promise || window.Promise;
---
> const Promise = window.dog_adoQpoasnfa76pfcZLmcfl_Promise || window.Promise;
有没有其他人遇到过类似的问题?
编辑 2022-05-09
我查看了控制台,似乎 运行ning perl 命令修改了包足以使代码签名无效。根据控制台,进程被杀死是因为:
Exception Type: EXC_BAD_ACCESS (SIGKILL (Code Signature Invalid))
不清楚为什么这在 Intel 机器上不是问题。
做了一些 google-ing 并且可以删除旧签名并强制使用“ad-hoc”签名。之后,chromedriver 就可以运行供个人使用了。
perl -pi -e 's/cdc_/dog_/g' /path/to/chromedriver
codesign --remove-signature /path/to/chromedriver
codesign --force --deep -s - /path/to/chromedriver
这会修改可执行文件、删除签名并添加新签名。以下是我收集这些命令的链接:
https://eclecticlight.co/2020/11/03/code-signatures-3-fixing-signature-problems/ https://www.purebasic.fr/english/viewtopic.php?t=78137
今天刚买的M1遇到了同样的问题,我一直在原地转圈。我买了那个M1 Powerbook来开发爬虫作业,所以我很沮丧。感谢您让我了解 M1 代码签名要求。