@@ -40,12 +40,18 @@ const { PuppeteerExtraPlugin } = require('puppeteer-extra-plugin')
4040class Plugin extends PuppeteerExtraPlugin {
4141 constructor ( opts = { } ) {
4242 super ( opts )
43+
44+ this . _headless = false
4345 }
4446
4547 get name ( ) {
4648 return 'stealth/evasions/user-agent-override'
4749 }
4850
51+ get dependencies ( ) {
52+ return new Set ( [ 'user-preferences' ] )
53+ }
54+
4955 get defaults ( ) {
5056 return {
5157 userAgent : null ,
@@ -61,8 +67,8 @@ class Plugin extends PuppeteerExtraPlugin {
6167
6268 // Full version number from Chrome
6369 const uaVersion = ua . includes ( 'Chrome/' )
64- ? ua . match ( / C h r o m e \/ ( [ ^ \s ] + ) / ) [ 1 ]
65- : ( await page . browser ( ) . version ( ) ) . match ( / \/ ( [ ^ \s ] + ) / ) [ 1 ]
70+ ? ua . match ( / C h r o m e \/ ( [ \d | . ] + ) / ) [ 1 ]
71+ : ( await page . browser ( ) . version ( ) ) . match ( / \/ ( [ \d | . ] + ) / ) [ 1 ]
6672
6773 // Get platform identifier (short or long version)
6874 const _getPlatform = ( extended = false ) => {
@@ -114,12 +120,12 @@ class Plugin extends PuppeteerExtraPlugin {
114120
115121 // Return OS version
116122 const _getPlatformVersion = ( ) => {
117- if ( ua . includes ( 'Mac OS X' ) ) {
123+ if ( ua . includes ( 'Mac OS X ' ) ) {
118124 return ua . match ( / M a c O S X ( [ ^ ) ] + ) / ) [ 1 ]
119- } else if ( ua . includes ( 'Android' ) ) {
125+ } else if ( ua . includes ( 'Android ' ) ) {
120126 return ua . match ( / A n d r o i d ( [ ^ ; ] + ) / ) [ 1 ]
121- } else if ( ua . includes ( 'Windows' ) ) {
122- return ua . match ( / ( [ \d | . ] + ) ; / ) [ 1 ]
127+ } else if ( ua . includes ( 'Windows ' ) ) {
128+ return ua . match ( / W i n d o w s . * ? ( [ \d | . ] + ) ; / ) [ 1 ]
123129 } else {
124130 return ''
125131 }
@@ -136,7 +142,6 @@ class Plugin extends PuppeteerExtraPlugin {
136142
137143 const override = {
138144 userAgent : ua ,
139- acceptLanguage : this . opts . locale || 'en-US,en' ,
140145 platform : _getPlatform ( ) ,
141146 userAgentMetadata : {
142147 brands : _getBrands ( ) ,
@@ -149,13 +154,36 @@ class Plugin extends PuppeteerExtraPlugin {
149154 }
150155 }
151156
157+ // In case of headless, override the acceptLanguage in CDP.
158+ // This is not preferred, as it messed up the header order.
159+ // On headful, we set the user preference language setting instead.
160+ if ( this . _headless ) {
161+ override . acceptLanguage = this . opts . locale || 'en-US,en'
162+ }
163+
152164 this . debug ( 'onPageCreated - Will set these user agent options' , {
153165 override,
154166 opts : this . opts
155167 } )
156168
157169 page . _client . send ( 'Network.setUserAgentOverride' , override )
158- } // onPageCreated
170+ }
171+
172+ async beforeLaunch ( options ) {
173+ // Check if launched headless
174+ this . _headless = options . headless
175+ }
176+
177+ get data ( ) {
178+ return [
179+ {
180+ name : 'userPreferences' ,
181+ value : {
182+ intl : { accept_languages : this . opts . locale || 'en-US,en' }
183+ }
184+ }
185+ ]
186+ }
159187}
160188
161189const defaultExport = opts => new Plugin ( opts )
0 commit comments