@@ -59,6 +59,15 @@ def get_chrome_version():
5959 return version_re .findall (_v )[0 ][:3 ]
6060 except WindowsError as e :
6161 print ("check Chrome failed:{}" .format (e ))
62+ elif sys .platform == 'darwin' :
63+ # 通过读取 /Applications/Google Chrome.app/Contents/Frameworks/Google Chrome Framework.framework/Versions/Current 这一符号连接指向的文件夹的名称,获得 Chrome 版本号
64+ try :
65+ full_version = os .path .basename (os .path .abspath (os .readlink ("/Applications/Google Chrome.app/Contents/Frameworks/Google "
66+ "Chrome Framework.framework/Versions/Current" )))
67+ return full_version .split ("." )[0 ]
68+ # 如果找不到 Chrome 程序或者获取错误,回退到默认的 131 版本
69+ except (OSError , IndexError ):
70+ return version
6271 else :
6372 return version
6473
@@ -92,23 +101,29 @@ def get_chrome_version():
92101if __name__ == "__main__" :
93102 os .system ("npm install -g extract-stealth-evasions" ) # 安装stealth.min.js
94103 os .system ("npx extract-stealth-evasions" ) # 提取stealth.min.js
104+
105+ # chromedriver 在 chrome 114 版本之后,提供了一个新的 API 来获取已知的 Chrome 版本和下载链接
106+ # 之前的版本需要手动维护下载链接
107+ # 现在可以通过访问 https://googlechromelabs.github.io/chrome-for-testing/known-good-versions-with-downloads.json
108+ # 来获取最新的 Chrome 版本和下载链接
95109 driver_downloads = []
96- response = requests .get (chrome_driver_url )
97- if response .status_code == 200 :
98- versions = json .loads (response .content )["versions" ]
99- versions = versions [::- 1 ] # 倒序排列数组
100- for info in versions :
101- version = info ["version" ].split ("." )[0 ]
102- if version .find (chrome_version ) == 0 :
103- downloads = info ["downloads" ]
104- if "chromedriver" in downloads :
105- print (info ["version" ])
106- driver_downloads = downloads ["chromedriver" ]
107- break
110+ if int (chrome_version .split ("." )[0 ]) >= 114 :
111+ response = requests .get (chrome_driver_url )
112+ if response .status_code == 200 :
113+ versions = json .loads (response .content )["versions" ]
114+ versions = versions [::- 1 ] # 倒序排列数组
115+ for info in versions :
116+ version = info ["version" ].split ("." )[0 ]
117+ if version .find (chrome_version ) == 0 :
118+ downloads = info ["downloads" ]
119+ if "chromedriver" in downloads :
120+ print (info ["version" ])
121+ driver_downloads = downloads ["chromedriver" ]
122+ break
123+ else :
124+ print ("Error: " , response .status_code )
125+ exit (1 )
108126 else :
109- print ("Error: " + response .status_code )
110- exit (1 )
111- if not driver_downloads and int (chrome_version ) < 115 :
112127 if chrome_version not in old_driver_version :
113128 print ("没有可用的chromedriver" )
114129 exit (1 )
@@ -249,7 +264,7 @@ def get_chrome_version():
249264 finally :
250265 shutil .rmtree ("./chromedrivers" )
251266 os .chmod ("./chromedriver_mac64" , 0o755 )
252- os .chmod ("./chrome_mac64.app" , 0o555 )
253- os .chmod ("./chrome_mac64.app/Contents/MacOS/Google Chrome" , 0o555 )
267+ os .chmod ("./chrome_mac64.app" , 0o755 )
268+ os .chmod ("./chrome_mac64.app/Contents/MacOS/Google Chrome" , 0o755 )
254269
255270 print ("Done and don't forget to generate executestage EXEcutable program!" )
0 commit comments