Skip to content

Commit 04445d5

Browse files
committed
Stricter regexpes, set lang as preference if using headful
1 parent 8a71622 commit 04445d5

File tree

1 file changed

+36
-8
lines changed
  • packages/puppeteer-extra-plugin-stealth/evasions/user-agent-override

1 file changed

+36
-8
lines changed

packages/puppeteer-extra-plugin-stealth/evasions/user-agent-override/index.js

Lines changed: 36 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,18 @@ const { PuppeteerExtraPlugin } = require('puppeteer-extra-plugin')
4040
class 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(/Chrome\/([^\s]+)/)[1]
65-
: (await page.browser().version()).match(/\/([^\s]+)/)[1]
70+
? ua.match(/Chrome\/([\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(/Mac OS X ([^)]+)/)[1]
119-
} else if (ua.includes('Android')) {
125+
} else if (ua.includes('Android ')) {
120126
return ua.match(/Android ([^;]+)/)[1]
121-
} else if (ua.includes('Windows')) {
122-
return ua.match(/([\d|.]+);/)[1]
127+
} else if (ua.includes('Windows ')) {
128+
return ua.match(/Windows .*?([\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

161189
const defaultExport = opts => new Plugin(opts)

0 commit comments

Comments
 (0)