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

Playwright configuration to imitate my original browser actions

提问人:Simonas Krasauskas 提问时间:9/26/2023 最后编辑:Simonas Krasauskas 更新时间:9/28/2023 访问量:172

问:

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

我正在将UserAgent设置为我的用户代理。 我没有设置代理,所以所有的请求都将来自我的 IP 地址。 我将 webdriver 值设置为 undefined(也许我应该将其设置为 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 剧作家 浏览器自动化

评论

0赞 ggorlen 9/26/2023
你想使用Playwright而不是userscript有什么原因吗?网站是什么,你在这里有什么具体问题?大多数问题都是宽泛和开放式的,但每个帖子应该有一个具体的问题。
0赞 Simonas Krasauskas 9/26/2023
@ggorlen,具体问题是当前配置是否足以隐藏我正在使用 Playwright,以及是否足以设置 userAgent 值以模仿我使用的是 Chrome 而不是 Playwright?我正在使用 Playwright,因为我对它有点熟悉,而不是对 userscript。检测到我之前的机器人,我想我没有隐瞒我正在使用自动浏览器。

答:

1赞 juanmajmjr 9/28/2023 #1

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

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

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

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

test.use({ userAgent: myUserAgent });

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

如果这些建议对您有所帮助,请告诉我,祝您好运:)