Playwright 配置来模仿我原来的浏览器操作

问题描述 投票:0回答:1

我正在尝试使用 Playwright 为浏览器游戏编写一个简单的机器人。游戏有一个我想避免的重复动作(按钮点击)。我的想法是能够在我原来的浏览器上玩游戏并使用 Playwright 来执行重复的动作。我想要实现的是配置 Playwright,以便看起来所有操作都是从我的浏览器执行的。

我将 UserAgent 设置为我的用户代理。 我没有设置代理,所以所有请求都来自我的 IP 地址。 我将 webdriver 值设置为未定义(也许我应该将其设置为 false?)

这是我用来打开浏览器的代码:

const browserDetails = await chromium.launch({
      headless: false,
    });
    setBrowser(browserDetails);

    const contextDetails = await browser.newContext({
      userAgent: myUserAgent,
    });
    setContext(contextDetails);

    await context.addInitScript("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})");

    const pageDetails = await context.newPage();
    setPage(pageDetails);
    await page.goto(loginUrl);

    await page.waitForSelector('input[name="name"]', 'input[name="password"]', 'button[type="submit"]');
    await page.waitForTimeout(randomWaitTimeSeconds1_2());
    await page.type('input[name="name"]', username, { delay: 50 });
    await page.type('input[name="password"]', password, { delay: 50 });
    await page.waitForTimeout(randomWaitTimeSeconds1_2());
    await page.click('button[type="submit"]');

这是我用于单击按钮的代码:

  await page.waitForTimeout(randomWaitTimeSeconds1_2());
  const btnNav = 'span.name:has-text("text")';
  await page.waitForSelector(btnNav);
  const span = await page.$(btnNav);

  logger.info(`going to the page`);
  await page.click(span);

  logger.info(`looking for a start button`);
  await page.waitForTimeout(randomWaitTimeSeconds1_2());
  const startBtnSelector = 'button.start';
  await page.waitForSelector(startBtnSelector)
  const startBtn = await page.$(startBtnSelector);

  await page.click(startBtn);

  // then it will click a button to go to "neutral" page
  // wait for 10-15minutes with page.waitForTimeout()
  // after that will check if user is logged in (according to the navigators)
  // will log in if required
  // click required buttons again
  // action repeated again

  // there will be a function which from time to time will close browser and excecute 
  // login and proceed with button clicking

当前配置是否足以隐藏我正在使用 Playwright,是否足以设置 userAgent 值来模仿我正在使用 Chrome 而不是 Playwright?我不完全确定反机器人检测是如何工作的(我知道我应该模仿人类的行为,但除此之外..)

javascript chromium playwright browser-automation
1个回答
0
投票

使用同一 IP 进行多次尝试可能是反机器人系统检测非人类行为的原因。尝试轮换您的 IP。

关于user-agent,只要你用正品就可以。 在这里您可以找到在您的 Playwright 中使用的真实用户代理

阅读 Playwright 文档后,我发现了一些原因,为什么您的用户代理可能没有在 Playwright 的所有上下文和页面中使用。

  1. 将用户代理应用于剧作家/测试
import { test } from '@playwright/test';

test.use({ userAgent: myUserAgent });

  1. 创建新页面时使用user_agent:
const pageDetails = await context.newPage(user_agent=myUserAgent);

请告诉我这些建议是否对您有帮助,祝你好运:)

© www.soinside.com 2019 - 2024. All rights reserved.