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