提问人:Simonas Krasauskas 提问时间:9/26/2023 最后编辑:Simonas Krasauskas 更新时间:9/28/2023 访问量:172
Playwright配置模仿我原来的浏览器操作
Playwright configuration to imitate my original browser actions
问:
我正在尝试使用 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?我不完全确定反机器人检测是如何工作的(我知道我应该模仿类似人类的行为,但除此之外......
答:
1赞
juanmajmjr
9/28/2023
#1
通过多次尝试使用相同的 IP 可能是反机器人系统检测非人类行为的原因。尝试轮换您的 IP。
关于用户代理,只要你使用真实的代理就可以了。在这里,您可以找到在您的 Playwright 中使用的真实用户代理
在阅读了 Playwright 文档后,我发现了一些原因,为什么您的用户代理可能没有在 Playwright 的所有上下文和页面中使用。
- 将用户代理应用于编剧/测试
import { test } from '@playwright/test';
test.use({ userAgent: myUserAgent });
- 创建新页面时使用 user_agent:
const pageDetails = await context.newPage(user_agent=myUserAgent);
如果这些建议对您有所帮助,请告诉我,祝您好运:)
评论