【问题标题】:Using node.js / puppeteer to print form elements?使用 node.js / puppeteer 打印表单元素?
【发布时间】:2019-07-19 01:12:47
【问题描述】:

我正在访问理光打印机的 Web 界面。我无法识别用户名和密码字段。通常我“检查”表单元素并复制“CSS 选择器”。此方法适用于其他形式,但不适用于这种形式。这是复制的“CSS选择器”:

body > table:nth-child(1) > tbody:nth-child(3) > tr:nth-child(6) > td:nth-child(1) > table:nth-child(1) > tbody:nth-child(1) > tr:nth-child(1) > td:nth-child(2) > table:nth-child(1) > tbody:nth-child(1) > tr:nth-child(2) > td:nth-child(2) > input:nth-child(1)

这是检查时的用户名字段:

<input name="userid_work" type="text" size="50" style="background-image: url(&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAASCAYAAABSO15qAAAAAXNSR0IArs4c6QAAAUBJREFUOBGVVE2ORUAQLvIS4gwzEysHkHgnkMiEc4zEJXCMNwtWTmDh3UGcYoaFhZUFCzFVnu4wIaiE+vvq6+6qTgthGH6O4/jA7x1OiCAIPwj7CoLgSXDxSjEVzAt9k01CBKdWfsFf/2WNuEwc2YqigKZpK9glAlVVwTTNbQJZlnlCkiTAZnF/mePB2biRdhwHdF2HJEmgaRrwPA+qqoI4jle5/8XkXzrCFoHg+/5ICdpm13UTho7Q9/0WnsfwiL/ouHwHrJgQR8WEwVG+oXpMPaDAkdzvd7AsC8qyhCiKJjiRnCKwbRsMw9hcQ5zv9maSBeu6hjRNYRgGFuKaCNwjkjzPoSiK1d1gDDecQobOBwswzabD/D3Np7AHOIrvNpHmPI+Kc2RZBm3bcp8wuwSIot7QQ0PznoR6wYSK0Xb/AGVLcWwc7Ng3AAAAAElFTkSuQmCC&quot;); background-repeat: no-repeat; background-attachment: scroll; background-size: 16px 18px; background-position: 98% 50%; cursor: auto;" autocomplete="off">

我已经尝试了这个、userid_work 等的各种排列,但无济于事。这基本上是我想要做的?

const USERNAME_SELECTOR = 'body > table:nth-child(1) > tbody:nth-child(3) > tr:nth-child(6) > td:nth-child(1) > table:nth-child(1) > tbody:nth-child(1) > tr:nth-child(1) > td:nth-child(2) > table:nth-child(1) > tbody:nth-child(1) > tr:nth-child(2) > td:nth-child(2) > input:nth-child(1)'; await page.click(USERNAME_SELECTOR); await page.keyboard.type(CREDS.username);

所以我想打印表单元素,看看返回了什么。除非有人能告诉我应该如何引用这个用户名字段?

尝试了这个表单元素的各种排列。

【问题讨论】:

    标签: node.js puppeteer


    【解决方案1】:

    我不知道你想做什么(点击或输入)

    所以试试这个点击输入:

    await page.click('input[name="userid_work"]');
    

    在输入中输入文本:

    await page.type('input[name="userid_work"]', text);
    

    使用javascript点击元素:

    await page.$eval('input[name="userid_work"]', e => e.click);
    

    使用 javascript 输入元素:

    await page.$eval('input[name="userid_work"]', e => e.value = 'text');
    

    【讨论】:

    • 谢谢。但我仍然遇到导航错误。当我尝试这个时:`await page.goto('175.22.70.210/web/guest/en/websys/webArch/authForm.cgi');等待 page.click('input[name="userid_work"]');等待 page.type('input[name="userid_work"]', CREDS.username); ` 我收到此导航错误:` node ./ricoh-login-new.js (node:23879) UnhandledPromiseRejectionWarning: 错误:执行上下文被破坏,很可能是因为导航。 `
    • CREDS.username 里有什么?
    • 这是脚本读取的凭证文件,名称已更改:`module.exports = { username: 'admin', password: 'abracadabra' } `
    • 点击前尝试添加await page.waitForSelector('input[name="userid_work"]')函数。
    • 谢谢。但是当我尝试时,我得到以下错误。就好像它一心想不认识这个表单元素! imeoutError:等待选择器“input[name="userid_work"]”失败:超过超时 30000ms
    猜你喜欢
    • 2019-03-27
    • 2021-02-02
    • 1970-01-01
    • 1970-01-01
    • 2020-05-10
    • 1970-01-01
    • 2019-09-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多