木偶简单表格登录

时间:2020-03-08 14:05:47

标签: node.js puppeteer

我的伪造者代码如下。我试图登录到每天触发的我的Broadbad页面。我尝试了curl命令,但是失败了。所以我现在正在尝试node js puppeteer。

login.js

driver.find_element_by_xpath(".//div[@class='btn-close-svg pull-right']").click()

我按如下方式运行

// example from github.com login page 
const puppeteer = require('puppeteer')
const screenshot = 'broadband.png';
(async () => {
  const browser = await puppeteer.launch({headless: true, ignoreHTTPSErrors: true})
  const page = await browser.newPage()
  await page.goto('https://server-ip-address/userportal/login.do?requesturi=http%3A%2F%2F1.254.254.254%2F%3F')
  await page.type('input[type="username"]', process.env.BB_USER)
  await page.type('input[type="password"]', process.env.BB_PWD)
  await page.click('[name="lesubmit"]')

  await page.waitForNavigation()
  await page.screenshot({ path: screenshot })
  browser.close()
  console.log('See screenshot: ' + screenshot)
})()

但是它总是说

错误:找不到选择器的节点:input [type =“ username”]

这是我的实际宽带登录地址:

BB_USER='my_username' BB_PWD='my_password' node login.js

老实说,在这种情况下,我不知道如何选择选择器。我认为 <div class="formBox"> <h2>Login to your account</h2> <form name="form1" action=""> <font color="red" size="2"> </font> <label>Service Type</label> <select name="type"><option value="1">Check Account Details</option> <option value="2" selected="selected">Internet Access</option></select> <label>User Name</label> <input type="text" name="username" value=""> <label>Password</label> <input type="password" name="password" value=""><br /> <input type="hidden" id="rememberme" name="rememberme"/> <div style="background:#f1f6f9; height:40px; margin:10px 0 0 0; padding:15px 0 0 0; border-top:1px solid #dedede;"> <a href='/userportal/forgotpasswd.do'>Forgot Password?</a> <input type="button" name="lesubmit" id="ptype" class="btn-primary" value="Login" onclick="return savesettings();" /> </div> </form> <div class="clear"></div> </div> </div> 就足够了,但还不够。你能提供一些提示吗?

1 个答案:

答案 0 :(得分:2)

欢迎来到SF!

定位'input[name="username"]'而不是'input[type="username"]'。 像这样:

await page.type('input[name="username"]', process.env.BB_USER)

说明

在您的示例中,目标HTML是

<input type="text" name="username" value="">`

因此正确的选择器将是:

input[name='username']

与目标HTML元素(name)上的<input name='username'>属性匹配

您的原始代码为input[type='username'],它将使<input>与属性type='username'相匹配。但是,目标元素具有type='text',而不是type='username',因此选择器不匹配,Puppeteer会通知您找不到匹配的元素:No node found for selector: input[type="username"]

用户名输入具有type='text'的原因是输入type属性确定which form control the browser renders(文本,数字,日期,复选框等)。由于用户名通常是文本,因此用户名字段使用type='text'