Puppeteer page.mouse.down() / up() 和点击物理鼠标不一样?
Puppeteer page.mouse.down() / up() not the same as clicking physical mouse?
在以下站点,输入诸如“宝贝”之类的搜索短语(试试吧!)后,Puppeteer 调用 page.mouse.down()
与单击并按住物理鼠标的效果不同:https://www.dextools.io/app/bsc
输入搜索词组后,会出现一个伪造的下拉菜单 select,这实际上是一个 UL
,我正试图点击第一个搜索结果。所以我使用这样的代码
await page.mouse.move(200, 350); // let's assume this is inside the element I want
await page.mouse.down();
await new Promise((resolve) => setTimeout(resolve, 2000)); // wait 2 secs
await page.mouse.up();
此代码的预期效果是,在 Puppeteer“按住”鼠标按钮的 2 秒内,假下拉菜单保持可见,而当 Puppeteer“释放”鼠标按钮时,站点重定向到项目 selected.
的搜索结果
这正是我使用 物理 鼠标时发生的情况。
然而,Puppeteer 的情况是,下拉菜单就消失了,就好像我按下了 Escape
键,之后的 page.mouse.up()
命令就不再起作用了。
我知道 PPT 在鼠标、键盘、按住和释放按钮以及修改键方面有一些怪癖,尤其是同时执行上述所有操作时。例如,拖放无法按预期工作,但此处提出的 none 解决方法对我有用:https://github.com/puppeteer/puppeteer/issues/1265
您可以根据 puppeteer docs:
试试这个,而不是两个单独的鼠标按下和向上操作
// selector would uniquely identify the button on your page that you would like to click
selector = '#dropdown-btn'
await page.click(selector, {delay: 2000})
一旦你有了你想要点击的列表元素,你应该在这个元素中寻找第一个 <a>
标签,并使用你在这个 <a>
上的引用来执行点击.
从 puppeteer 的文档中可以看出,如果有您应该使用的导航:
const [response] = await Promise.all([
page.waitForNavigation(waitOptions),
page.click(selector, clickOptions),
]);
其中选择器将引用提到的 <a>
标签。
我无法使用此测试脚本重现该问题。单击 link 并使用以下导航:
import puppeteer from 'puppeteer';
const browser = await puppeteer.launch({ headless: false, defaultViewport: null });
try {
const [page] = await browser.pages();
await page.goto('https://www.dextools.io/app/bsc', { timeout: 0 });
const input = await page.waitForSelector('.input-container input');
await input.type('baby');
const link = await page.waitForSelector('.suggestions-container.is-visible a:not(.text-sponsor)');
await link.click();
} catch (err) { console.error(err); }
在以下站点,输入诸如“宝贝”之类的搜索短语(试试吧!)后,Puppeteer 调用 page.mouse.down()
与单击并按住物理鼠标的效果不同:https://www.dextools.io/app/bsc
输入搜索词组后,会出现一个伪造的下拉菜单 select,这实际上是一个 UL
,我正试图点击第一个搜索结果。所以我使用这样的代码
await page.mouse.move(200, 350); // let's assume this is inside the element I want
await page.mouse.down();
await new Promise((resolve) => setTimeout(resolve, 2000)); // wait 2 secs
await page.mouse.up();
此代码的预期效果是,在 Puppeteer“按住”鼠标按钮的 2 秒内,假下拉菜单保持可见,而当 Puppeteer“释放”鼠标按钮时,站点重定向到项目 selected.
的搜索结果这正是我使用 物理 鼠标时发生的情况。
然而,Puppeteer 的情况是,下拉菜单就消失了,就好像我按下了 Escape
键,之后的 page.mouse.up()
命令就不再起作用了。
我知道 PPT 在鼠标、键盘、按住和释放按钮以及修改键方面有一些怪癖,尤其是同时执行上述所有操作时。例如,拖放无法按预期工作,但此处提出的 none 解决方法对我有用:https://github.com/puppeteer/puppeteer/issues/1265
您可以根据 puppeteer docs:
试试这个,而不是两个单独的鼠标按下和向上操作// selector would uniquely identify the button on your page that you would like to click
selector = '#dropdown-btn'
await page.click(selector, {delay: 2000})
一旦你有了你想要点击的列表元素,你应该在这个元素中寻找第一个 <a>
标签,并使用你在这个 <a>
上的引用来执行点击.
从 puppeteer 的文档中可以看出,如果有您应该使用的导航:
const [response] = await Promise.all([
page.waitForNavigation(waitOptions),
page.click(selector, clickOptions),
]);
其中选择器将引用提到的 <a>
标签。
我无法使用此测试脚本重现该问题。单击 link 并使用以下导航:
import puppeteer from 'puppeteer';
const browser = await puppeteer.launch({ headless: false, defaultViewport: null });
try {
const [page] = await browser.pages();
await page.goto('https://www.dextools.io/app/bsc', { timeout: 0 });
const input = await page.waitForSelector('.input-container input');
await input.type('baby');
const link = await page.waitForSelector('.suggestions-container.is-visible a:not(.text-sponsor)');
await link.click();
} catch (err) { console.error(err); }