首页 > 解决方案 > 使用 Puppeteer 点击“onclick”-login-button

问题描述

我在使用 Puppeteer 为使用“onclick”脚本弹出登录窗口的网站自动登录时遇到了困难。登录链接如下所示:

<li>
   <a href="#" onclick='openJqueryDialog("D_Login"); return false;' style="padding-right:0;">Login</a>
   <span class="blu">oder</span>
   <a href="/de/registrierung" onclick="addGTMEvent('Homepage', 'Clicks - Register')">Registrieren</a>
</li>

不幸的是,该页面没有提供登录提示,可以直接通过其 ID 来处理登录字段,如许多 puppeteer-examples 中所示。只能使用此弹出窗口登录。我尝试了许多不同的方法来打开这个登录提示,例如:

(await page.$$eval(selector, a => a.filter(a => a.textContent === 'Login')))[0].click();

或者

let selector = 'a';
         page.$$eval(selector, anchors => {
             anchors.map(anchor => {
                 if(anchor.textContent == 'Login') {
                     anchor.click();
                     return
                 }
                 })
         });

在这些操作之后,我希望在使用之后立即在屏幕截图中看到这个登录窗口

await page.screenshot({ path: screenshot2 });

我还尝试使用 page.$x() 来使用它的 x 路径。不幸的是,这些都不起作用。我在操作后立即拍摄的屏幕截图返回了与预期点击之前相同的页面结果。我希望看到屏幕截图上弹出登录窗口。可能是屏幕截图功能不显示此窗口,即使它是可见的?

有没有办法在执行 puppeteer 脚本时查看浏览器的运行情况?我做了一些实验

const browser = await puppeteer.launch({ headless:false });

但这没有显示任何浏览器窗口。所以目前我只有截图作为返回值。

不幸的是,我对 JavaScript 不太熟悉......

我怎样才能实现点击此链接?

标签: javascriptauthenticationautomated-testspuppeteer

解决方案


我找到了一个更好的方法:Selenium + python。马上工作。很棒的调试功能。也支持火狐。更简单的语法。少动脑筋。


推荐阅读