@skrillex1224/playwright-toolkit 2.1.280 → 2.1.281

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -4731,143 +4731,91 @@ var DefaultHumanize = {
4731
4731
 
4732
4732
  // src/internals/humanize/cloakbrowser.js
4733
4733
  var import_delay4 = __toESM(require("delay"), 1);
4734
- var isPageLike2 = (value) => value && typeof value === "object" && typeof value.evaluate === "function";
4735
- var isPoint2 = (value) => value && typeof value === "object" && Number.isFinite(Number(value.x)) && Number.isFinite(Number(value.y));
4736
4734
  var resolveDeviceFromPage3 = (page) => normalizeDevice(page?.[PageRuntimeStateKey]?.device);
4737
4735
  var isMobilePage = (page) => resolveDeviceFromPage3(page) === Device.Mobile;
4736
+ var isPageLike2 = (value) => value && typeof value === "object" && typeof value.evaluate === "function";
4737
+ var isPoint2 = (value) => value && typeof value === "object" && Number.isFinite(Number(value.x)) && Number.isFinite(Number(value.y));
4738
4738
  var resolveNativeTarget2 = (page, target) => typeof target === "string" ? page.locator(target).first() : target;
4739
- var targetExists = async (target) => {
4740
- if (!target) {
4741
- return false;
4742
- }
4743
- if (typeof target.count === "function") {
4744
- const count = await target.count().catch(() => 0);
4745
- return count > 0;
4746
- }
4747
- if (typeof target.elementHandle === "function") {
4748
- const handle = await target.elementHandle().catch(() => null);
4749
- try {
4750
- return Boolean(handle);
4751
- } finally {
4752
- await handle?.dispose?.().catch(() => {
4753
- });
4754
- }
4755
- }
4756
- return true;
4739
+ var getViewportCenter = (page) => {
4740
+ const viewport = page?.viewportSize?.() || { width: 1365, height: 900 };
4741
+ return {
4742
+ x: Math.round(viewport.width / 2),
4743
+ y: Math.round(viewport.height / 2)
4744
+ };
4757
4745
  };
4758
- var getTargetBoundingBox2 = async (target) => {
4759
- if (!target) {
4746
+ var readViewportScroll = async (page) => await page.evaluate(() => ({ x: window.scrollX, y: window.scrollY })).catch(() => ({ x: 0, y: 0 }));
4747
+ var getTargetBox = async (target) => {
4748
+ if (!target || typeof target.boundingBox !== "function") {
4760
4749
  return null;
4761
4750
  }
4762
- if (typeof target.boundingBox === "function") {
4763
- return await target.boundingBox().catch(() => null);
4764
- }
4765
- if (typeof target.elementHandle === "function") {
4766
- const handle = await target.elementHandle().catch(() => null);
4767
- try {
4768
- return await handle?.boundingBox?.().catch(() => null);
4769
- } finally {
4770
- await handle?.dispose?.().catch(() => {
4771
- });
4772
- }
4773
- }
4774
- return null;
4751
+ return await target.boundingBox().catch(() => null);
4775
4752
  };
4776
- var resolveActionTarget = async (page, target, { throwOnMissing = true } = {}) => {
4777
- if (target == null) {
4778
- return null;
4779
- }
4780
- const resolvedTarget = resolveNativeTarget2(page, target);
4781
- if (throwOnMissing || await targetExists(resolvedTarget)) {
4782
- return resolvedTarget;
4753
+ var clickOptionsFrom = (options = {}) => {
4754
+ const nextOptions = {
4755
+ force: true
4756
+ };
4757
+ if (options.timeout != null) {
4758
+ nextOptions.timeout = options.timeout;
4783
4759
  }
4784
- return null;
4785
- };
4786
- var readViewportScroll = async (page) => {
4787
- return await page.evaluate(() => ({ x: window.scrollX, y: window.scrollY })).catch(() => ({ x: 0, y: 0 }));
4760
+ return nextOptions;
4788
4761
  };
4789
- var buildTypingHumanConfig = (options = {}) => {
4790
- const humanConfig = {};
4791
- if (Number.isFinite(Number(options.baseDelay))) {
4792
- humanConfig.typing_delay = Number(options.baseDelay);
4762
+ var typeOptionsFrom = (options = {}) => {
4763
+ const nextOptions = {};
4764
+ if (options.timeout != null) {
4765
+ nextOptions.timeout = options.timeout;
4793
4766
  }
4794
- if (Number.isFinite(Number(options.pauseProbability))) {
4795
- humanConfig.typing_pause_chance = Number(options.pauseProbability);
4796
- }
4797
- if (Number.isFinite(Number(options.pauseBase))) {
4798
- const basePause = Math.max(40, Number(options.pauseBase));
4799
- humanConfig.typing_pause_range = [
4800
- Math.round(basePause * 0.5),
4801
- Math.round(basePause * 1.5)
4802
- ];
4767
+ if (options.baseDelay != null) {
4768
+ nextOptions.delay = Math.max(0, Number(options.baseDelay) || 0);
4803
4769
  }
4804
- return Object.keys(humanConfig).length > 0 ? humanConfig : null;
4770
+ return nextOptions;
4805
4771
  };
4806
- var buildActionOptions = (options = {}) => {
4807
- const actionOptions = {
4808
- force: true
4809
- };
4810
- if (options && options.timeout != null) {
4811
- actionOptions.timeout = options.timeout;
4772
+ var pressOptionsFrom = (options = {}) => {
4773
+ const nextOptions = {};
4774
+ if (options.timeout != null) {
4775
+ nextOptions.timeout = options.timeout;
4812
4776
  }
4813
- const humanConfig = buildTypingHumanConfig(options);
4814
- if (humanConfig) {
4815
- actionOptions.human_config = humanConfig;
4777
+ if (options.holdDelay != null) {
4778
+ nextOptions.delay = Math.max(0, Number(options.holdDelay) || 0);
4816
4779
  }
4817
- return actionOptions;
4780
+ return nextOptions;
4818
4781
  };
4819
- var jitterSleep = async (baseMs, jitterPercent = 0.3) => {
4782
+ var waitDesktopJitter = async (baseMs, jitterPercent = 0.3) => {
4820
4783
  await (0, import_delay4.default)(jitterMs(baseMs, jitterPercent));
4821
4784
  };
4822
- var moveCursorToPoint = async (page, point) => {
4823
- await page.mouse.move(Number(point.x), Number(point.y));
4824
- return true;
4825
- };
4826
- var CloakBrowserHumanize = {
4785
+ var DesktopCloakHumanize = {
4827
4786
  jitterMs(base, jitterPercent = 0.3) {
4828
4787
  return jitterMs(base, jitterPercent);
4829
4788
  },
4830
4789
  async initializeCursor(page) {
4831
- if (isMobilePage(page)) {
4832
- return await MobileHumanize.initializeCursor(page);
4833
- }
4834
4790
  return Boolean(page);
4835
4791
  },
4836
4792
  async humanMove(page, target) {
4837
- if (isMobilePage(page)) {
4838
- return await MobileHumanize.humanMove(page, target);
4793
+ if (target == null) {
4794
+ return false;
4839
4795
  }
4840
4796
  if (isPoint2(target)) {
4841
- return await moveCursorToPoint(page, target);
4842
- }
4843
- const resolvedTarget = await resolveActionTarget(page, target, { throwOnMissing: false });
4844
- if (!resolvedTarget) {
4845
- return false;
4797
+ await page.mouse.move(Number(target.x), Number(target.y));
4798
+ return true;
4846
4799
  }
4847
- if (typeof resolvedTarget.hover === "function") {
4848
- await resolvedTarget.hover({ force: true });
4800
+ const resolvedTarget = resolveNativeTarget2(page, target);
4801
+ if (typeof resolvedTarget?.hover === "function") {
4802
+ await resolvedTarget.hover(clickOptionsFrom());
4849
4803
  return true;
4850
4804
  }
4851
- const box = await getTargetBoundingBox2(resolvedTarget);
4805
+ const box = await getTargetBox(resolvedTarget);
4852
4806
  if (!box) {
4853
4807
  return false;
4854
4808
  }
4855
- return await moveCursorToPoint(page, {
4856
- x: box.x + box.width / 2,
4857
- y: box.y + box.height / 2
4858
- });
4809
+ await page.mouse.move(box.x + box.width / 2, box.y + box.height / 2);
4810
+ return true;
4859
4811
  },
4860
- async humanScroll(page, target, options = {}) {
4861
- if (isMobilePage(page)) {
4862
- return await MobileHumanize.humanScroll(page, target, options);
4863
- }
4864
- const resolvedTarget = await resolveActionTarget(page, target, { throwOnMissing: false });
4812
+ async humanScroll(page, target) {
4813
+ const resolvedTarget = resolveNativeTarget2(page, target);
4865
4814
  if (!resolvedTarget) {
4866
4815
  return { element: null, didScroll: false, restore: null };
4867
4816
  }
4868
4817
  const before = await readViewportScroll(page);
4869
- await resolvedTarget.scrollIntoViewIfNeeded?.().catch(() => {
4870
- });
4818
+ await resolvedTarget.scrollIntoViewIfNeeded?.();
4871
4819
  const after = await readViewportScroll(page);
4872
4820
  return {
4873
4821
  element: resolvedTarget,
@@ -4876,183 +4824,156 @@ var CloakBrowserHumanize = {
4876
4824
  };
4877
4825
  },
4878
4826
  async humanClick(page, target, options = {}) {
4879
- if (isMobilePage(page)) {
4880
- return await MobileHumanize.humanClick(page, target, options);
4881
- }
4882
4827
  if (target == null) {
4883
- const { x = 0, y = 0 } = page?._humanCursor || {};
4884
- await page.mouse.click(x || 0, y || 0);
4828
+ const center = getViewportCenter(page);
4829
+ await page.mouse.click(center.x, center.y);
4885
4830
  return true;
4886
4831
  }
4887
4832
  if (isPoint2(target)) {
4888
4833
  await page.mouse.click(Number(target.x), Number(target.y));
4889
4834
  return true;
4890
4835
  }
4891
- const resolvedTarget = await resolveActionTarget(page, target, {
4892
- throwOnMissing: options.throwOnMissing !== false
4893
- });
4894
- if (!resolvedTarget) {
4895
- return false;
4836
+ if (typeof target === "string") {
4837
+ await page.click(target, clickOptionsFrom(options));
4838
+ return true;
4896
4839
  }
4897
- if (typeof resolvedTarget.click === "function") {
4898
- await resolvedTarget.click(buildActionOptions(options));
4840
+ if (typeof target?.click === "function") {
4841
+ await target.click(clickOptionsFrom(options));
4899
4842
  return true;
4900
4843
  }
4901
- const box = await getTargetBoundingBox2(resolvedTarget);
4844
+ const box = await getTargetBox(target);
4902
4845
  if (!box) {
4903
- if (options.throwOnMissing !== false) {
4904
- throw new Error("\u65E0\u6CD5\u83B7\u53D6\u5143\u7D20\u4F4D\u7F6E");
4905
- }
4906
4846
  return false;
4907
4847
  }
4908
4848
  await page.mouse.click(box.x + box.width / 2, box.y + box.height / 2);
4909
4849
  return true;
4910
4850
  },
4911
- async randomSleep(pageOrBaseMs, maybeBaseMs, maybeJitterPercent) {
4912
- if (isPageLike2(pageOrBaseMs)) {
4913
- if (isMobilePage(pageOrBaseMs)) {
4914
- return await MobileHumanize.randomSleep(maybeBaseMs, maybeJitterPercent);
4915
- }
4916
- await jitterSleep(maybeBaseMs, maybeJitterPercent ?? 0.3);
4917
- return;
4918
- }
4919
- await jitterSleep(pageOrBaseMs, maybeBaseMs ?? 0.3);
4851
+ async randomSleep(baseMs, jitterPercent = 0.3) {
4852
+ await waitDesktopJitter(baseMs, jitterPercent);
4920
4853
  },
4921
4854
  async simulateGaze(page, baseDurationMs = 2500) {
4922
- if (isMobilePage(page)) {
4923
- return await MobileHumanize.simulateGaze(page, baseDurationMs);
4924
- }
4925
4855
  const durationMs = jitterMs(baseDurationMs, 0.4);
4926
- const startTime = Date.now();
4927
- const viewportSize = page.viewportSize() || { width: 1365, height: 900 };
4928
- while (Date.now() - startTime < durationMs) {
4856
+ const startedAt = Date.now();
4857
+ const viewport = page.viewportSize() || { width: 1365, height: 900 };
4858
+ while (Date.now() - startedAt < durationMs) {
4929
4859
  await page.mouse.move(
4930
- 100 + Math.random() * Math.max(120, viewportSize.width - 200),
4931
- 100 + Math.random() * Math.max(120, viewportSize.height - 200)
4860
+ 100 + Math.random() * Math.max(120, viewport.width - 200),
4861
+ 100 + Math.random() * Math.max(120, viewport.height - 200)
4932
4862
  );
4933
- await jitterSleep(600, 0.5);
4863
+ await waitDesktopJitter(600, 0.5);
4934
4864
  }
4935
4865
  },
4936
4866
  async humanType(page, selector, text, options = {}) {
4937
- if (isMobilePage(page)) {
4938
- return await MobileHumanize.humanType(page, selector, text, options);
4939
- }
4940
- const actionOptions = buildActionOptions(options);
4941
4867
  if (typeof selector === "string") {
4942
- await page.type(selector, text, actionOptions);
4868
+ await page.type(selector, text, typeOptionsFrom(options));
4943
4869
  return;
4944
4870
  }
4945
- const resolvedTarget = await resolveActionTarget(page, selector, { throwOnMissing: true });
4946
- if (!resolvedTarget || typeof resolvedTarget.type !== "function") {
4947
- throw new Error("\u76EE\u6807\u5143\u7D20\u4E0D\u652F\u6301 type()");
4948
- }
4949
- await resolvedTarget.type(text, actionOptions);
4871
+ await selector.type(text, typeOptionsFrom(options));
4950
4872
  },
4951
4873
  async humanPress(page, targetOrKey, maybeKey, options = {}) {
4952
- if (isMobilePage(page)) {
4953
- return await MobileHumanize.humanPress(page, targetOrKey, maybeKey, options);
4954
- }
4955
4874
  const hasTarget = typeof maybeKey === "string";
4956
4875
  const key = hasTarget ? maybeKey : targetOrKey;
4957
4876
  const pressOptions = hasTarget ? options : maybeKey || options;
4958
4877
  if (!hasTarget) {
4959
- await jitterSleep(pressOptions.reactionDelay ?? 180, 0.45);
4960
- await page.keyboard.press(key, {
4961
- ...pressOptions.keyboardOptions || {},
4962
- delay: jitterMs(pressOptions.holdDelay ?? 45, 0.5)
4963
- });
4878
+ await page.keyboard.press(key, pressOptionsFrom(pressOptions));
4964
4879
  return true;
4965
4880
  }
4966
4881
  if (typeof targetOrKey === "string") {
4967
- await page.press(targetOrKey, key, buildActionOptions(pressOptions));
4882
+ await page.press(targetOrKey, key, pressOptionsFrom(pressOptions));
4968
4883
  return true;
4969
4884
  }
4970
- const resolvedTarget = await resolveActionTarget(page, targetOrKey, {
4971
- throwOnMissing: pressOptions.throwOnMissing !== false
4972
- });
4973
- if (!resolvedTarget) {
4974
- return false;
4975
- }
4976
- if (typeof resolvedTarget.press === "function") {
4977
- await resolvedTarget.press(key, buildActionOptions(pressOptions));
4885
+ if (typeof targetOrKey?.press === "function") {
4886
+ await targetOrKey.press(key, pressOptionsFrom(pressOptions));
4978
4887
  return true;
4979
4888
  }
4980
- await this.humanClick(page, targetOrKey, {
4981
- ...pressOptions,
4982
- reactionDelay: pressOptions.focusDelay ?? 180
4983
- });
4984
- await jitterSleep(pressOptions.reactionDelay ?? 180, 0.45);
4985
- await page.keyboard.press(key, {
4986
- ...pressOptions.keyboardOptions || {},
4987
- delay: jitterMs(pressOptions.holdDelay ?? 45, 0.5)
4988
- });
4889
+ await page.keyboard.press(key, pressOptionsFrom(pressOptions));
4989
4890
  return true;
4990
4891
  },
4991
4892
  async humanClear(page, selector) {
4992
- if (isMobilePage(page)) {
4993
- return await MobileHumanize.humanClear(page, selector);
4994
- }
4995
4893
  if (typeof selector === "string") {
4996
4894
  if (typeof page.clear === "function") {
4997
- await page.clear(selector, { force: true });
4895
+ await page.clear(selector, clickOptionsFrom());
4998
4896
  return;
4999
4897
  }
5000
- await page.fill(selector, "", { force: true });
4898
+ await page.fill(selector, "", clickOptionsFrom());
5001
4899
  return;
5002
4900
  }
5003
- const resolvedTarget = await resolveActionTarget(page, selector, { throwOnMissing: true });
5004
- if (!resolvedTarget) {
5005
- throw new Error("\u76EE\u6807\u5143\u7D20\u4E0D\u652F\u6301 clear()");
5006
- }
5007
- if (typeof resolvedTarget.clear === "function") {
5008
- await resolvedTarget.clear(buildActionOptions());
4901
+ if (typeof selector?.clear === "function") {
4902
+ await selector.clear(clickOptionsFrom());
5009
4903
  return;
5010
4904
  }
5011
- if (typeof resolvedTarget.fill === "function") {
5012
- await resolvedTarget.fill("", buildActionOptions());
4905
+ if (typeof selector?.fill === "function") {
4906
+ await selector.fill("", clickOptionsFrom());
5013
4907
  return;
5014
4908
  }
5015
- throw new Error("\u76EE\u6807\u5143\u7D20\u4E0D\u652F\u6301 clear()");
5016
4909
  },
5017
4910
  async warmUpBrowsing(page, baseDuration = 3500) {
5018
- if (isMobilePage(page)) {
5019
- return await MobileHumanize.warmUpBrowsing(page, baseDuration);
5020
- }
5021
4911
  const durationMs = jitterMs(baseDuration, 0.4);
5022
- const startTime = Date.now();
5023
- const viewportSize = page.viewportSize() || { width: 1365, height: 900 };
5024
- while (Date.now() - startTime < durationMs) {
5025
- const action = Math.random();
5026
- if (action < 0.4) {
5027
- await page.mouse.move(
5028
- 100 + Math.random() * Math.max(120, viewportSize.width - 200),
5029
- 100 + Math.random() * Math.max(120, viewportSize.height - 200)
5030
- );
5031
- await jitterSleep(350, 0.4);
5032
- continue;
5033
- }
5034
- if (action < 0.7) {
5035
- await page.mouse.wheel(0, (Math.random() - 0.5) * 220);
5036
- await jitterSleep(500, 0.4);
5037
- continue;
5038
- }
5039
- await jitterSleep(800, 0.5);
4912
+ const startedAt = Date.now();
4913
+ while (Date.now() - startedAt < durationMs) {
4914
+ await this.simulateGaze(page, 240);
4915
+ await this.naturalScroll(page, Math.random() > 0.4 ? "down" : "up", 160, 3);
4916
+ await waitDesktopJitter(250, 0.35);
5040
4917
  }
5041
4918
  },
5042
4919
  async naturalScroll(page, direction = "down", distance = 300, baseSteps = 5) {
5043
- if (isMobilePage(page)) {
5044
- return await MobileHumanize.naturalScroll(page, direction, distance, baseSteps);
5045
- }
5046
- const steps = Math.max(3, baseSteps + Math.floor(Math.random() * 3) - 1);
5047
- const actualDistance = jitterMs(distance, 0.15);
4920
+ const steps = Math.max(1, Number(baseSteps) || 1);
4921
+ const stepDistance = (Number(distance) || 0) / steps;
5048
4922
  const sign = direction === "down" ? 1 : -1;
5049
- const stepDistance = actualDistance / steps;
5050
4923
  for (let index = 0; index < steps; index += 1) {
5051
- const factor = 1 - index / steps * 0.5;
5052
- const jitter = 0.9 + Math.random() * 0.2;
5053
- await page.mouse.wheel(0, stepDistance * factor * sign * jitter);
5054
- await jitterSleep(60 + index * 25, 0.3);
4924
+ await page.mouse.wheel(0, stepDistance * sign);
4925
+ await waitDesktopJitter(60 + index * 20, 0.3);
4926
+ }
4927
+ }
4928
+ };
4929
+ var resolveDelegate2 = (page) => isMobilePage(page) ? MobileHumanize : DesktopCloakHumanize;
4930
+ var callDelegate2 = (method, page, args) => {
4931
+ const delegate = resolveDelegate2(page);
4932
+ return delegate[method](page, ...args);
4933
+ };
4934
+ var CloakBrowserHumanize = {
4935
+ jitterMs(base, jitterPercent = 0.3) {
4936
+ return jitterMs(base, jitterPercent);
4937
+ },
4938
+ initializeCursor(page) {
4939
+ return callDelegate2("initializeCursor", page, []);
4940
+ },
4941
+ humanMove(page, target) {
4942
+ return callDelegate2("humanMove", page, [target]);
4943
+ },
4944
+ humanScroll(page, target, options = {}) {
4945
+ return callDelegate2("humanScroll", page, [target, options]);
4946
+ },
4947
+ humanClick(page, target, options = {}) {
4948
+ return callDelegate2("humanClick", page, [target, options]);
4949
+ },
4950
+ randomSleep(pageOrBaseMs, maybeBaseMs, maybeJitterPercent) {
4951
+ if (isPageLike2(pageOrBaseMs)) {
4952
+ const delegate = resolveDelegate2(pageOrBaseMs);
4953
+ return delegate.randomSleep(maybeBaseMs, maybeJitterPercent);
5055
4954
  }
4955
+ return DesktopCloakHumanize.randomSleep(pageOrBaseMs, maybeBaseMs);
4956
+ },
4957
+ simulateGaze(page, baseDurationMs = 2500) {
4958
+ return callDelegate2("simulateGaze", page, [baseDurationMs]);
4959
+ },
4960
+ humanType(page, selector, text, options = {}) {
4961
+ return callDelegate2("humanType", page, [selector, text, options]);
4962
+ },
4963
+ humanPress(page, targetOrKey, maybeKey, options = {}) {
4964
+ if (typeof maybeKey === "string") {
4965
+ return callDelegate2("humanPress", page, [targetOrKey, maybeKey, options]);
4966
+ }
4967
+ return callDelegate2("humanPress", page, [targetOrKey, maybeKey || options]);
4968
+ },
4969
+ humanClear(page, selector) {
4970
+ return callDelegate2("humanClear", page, [selector]);
4971
+ },
4972
+ warmUpBrowsing(page, baseDuration = 3500) {
4973
+ return callDelegate2("warmUpBrowsing", page, [baseDuration]);
4974
+ },
4975
+ naturalScroll(page, direction = "down", distance = 300, baseSteps = 5) {
4976
+ return callDelegate2("naturalScroll", page, [direction, distance, baseSteps]);
5056
4977
  }
5057
4978
  };
5058
4979