【问题标题】:How do I click a button that has no ID using (Apify's) Puppeteer?如何使用(Apify 的)Puppeteer 单击没有 ID 的按钮?
【发布时间】:2018-11-06 03:09:14
【问题描述】:

我正在使用Apify's puppeteer 登录this website。我确实研究了类似的问题,但无济于事。

我无法找到linked login page 上看到的主登录按钮的可点击 ID/元素。目前,我的代码如下所示:

const Apify = require('apify');

Apify.main(async () => {
const input = await Apify.getValue('INPUT');

const browser = await Apify.launchPuppeteer();
const page = await browser.newPage();
await page.goto('https://www.sunpass.com/vector/account/home/accountLogin.do');

// Login
await page.type('#tt_username1', input.username);
await page.type('#tt_loginPassword1', input.password);
await page.waitFor(2000);
await page.click('#entryform input');
await page.waitForNavigation();

// Get cookies
const cookies = await page.cookies();

// Use cookies in other tab or browser
const page2 = await browser.newPage();
await page2.setCookie(...cookies);
await page2.goto('https://www.sunpass.com/vector/account/transactions/webtransactionSearch.do'); // Opens page as logged user

await browser.close();

console.log('Done.');

使用 id entryform 我收到以下错误:Node is either not visible or not an HTMLElement

使用 id loginP 我收到以下错误:No node found for selector

我使用 XPath 来定位这些,它没有提供其他使用的 id。对于如何为此登录按钮或任何其他方法找到可点击元素的任何帮助将不胜感激。

【问题讨论】:

    标签: button puppeteer clickable apify


    【解决方案1】:

    您必须尝试另一个选择器。 我试过button[name="btnLogin"],它成功了。

    测试代码:

    const Apify = require('apify');
    
    Apify.main(async () => {
        const input = await Apify.getValue('INPUT');
    
        const browser = await Apify.launchPuppeteer();
        const page = await browser.newPage();
        await page.goto('https://www.sunpass.com/vector/account/home/accountLogin.do');
    
        // Login
        await page.type('#tt_username1', input.username);
        await page.type('#tt_loginPassword1', input.password);
        await page.waitFor(2000);
        await page.click('button[name="btnLogin"]');
        await page.waitForNavigation();
    
        // Get cookies
        const cookies = await page.cookies();
    
        // Use cookies in other tab or browser
        const page2 = await browser.newPage();
        await page2.setCookie(...cookies);
        await page2.goto('https://www.sunpass.com/vector/account/transactions/webtransactionSearch.do'); // Opens page as logged user
    
        await browser.close();
    
        console.log('Done.');
    });
    

    【讨论】:

    • 我已经在 Actor 中测试了上述代码,但任务输出显示:“TimeoutError: Navigation Timeout Exceeded: 30000ms exceeded.”我尝试了所有三个非 beta 基础图像。我不知道是第一页还是第二页造成的……当然,我在源站点没有帐户;我在 Task 和 Actor 中都有这样的 INPUT(因为我不知道哪个是正确的)...{ "username": "foo", "password": "bar" }
    • 他们必须更改提交按钮的 CSS 选择器。您必须在页面上找到正确的选择器。
    【解决方案2】:

    在我在桌面上测试登录表单时,可以使用此选择器找到“登录”按钮:

    button[name=btnLogin].btn-large
    

    【讨论】:

      猜你喜欢
      • 2021-07-05
      • 1970-01-01
      • 2019-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-14
      • 1970-01-01
      • 2013-01-24
      相关资源
      最近更新 更多