首页 > 解决方案 > 如何使用节点刮刀单击页面中的“提交”按钮,然后检索它转到的页面

问题描述

我正在节点中构建一个刮板,但我被难住了。我去这个地址:https ://ariisp1.oklahomacounty.org/AssessorWP5/DefaultSearch.asp ,我想模拟将地址放在第二个文本框中并单击随后的“提交”按钮。我可以成功找到文本框和以下按钮,但我无法弄清楚如何模拟“点击”功能并检索它转到的 url。没有与该按钮关联的 href,因为它转到的 url 由输入的地址决定。有什么想法吗?

var request = require('request');
var cheerio = require('cheerio');


request.post('https://ariisp1.oklahomacounty.org/AssessorWP5/DefaultSearch.asp', /*{
  form: {
    FormattedLocation: '2333 Nw 32 St'
    //btnSubmit: 'Submit'
  }
}, */
function (err, res, body) {
    let $ = cheerio.load(body);


    $("input[name=FormattedLocation]").text('2331 nw 32 st');
    var x = $("input[name=FormattedLocation]").text();
    var y = $("input[name=FormattedLocation]").next().attr('type');

    console.log(y);//successfully gets the 'Submit' button

    //code to click button and get the page it goes to goes here
})

标签: jquerynode.jscommand-lineweb-scrapingcheerio

解决方案


你不需要用cheerio点击按钮,你需要做的是发出POST请求然后解析结果。目前尚不完全清楚您要对结果做什么,并且您的示例代码基本上已经在这样做了。困难的部分是您得到的表单响应是一团乱七八糟的 HTML,而且您还没有告诉我们您要从中提取什么。

request.post('https://ariisp1.oklahomacounty.org/AssessorWP5/AddressSearch.asp', { form: { FormattedLocation: '2333 Nw 32 St' }}, (err, res, body) => console.log(body)); 

如果您运行它,您将看到您的请求发生并返回 HTML,就好像您单击了相关的提交按钮一样。从那里开始,您对 Cheerio 所做的事情取决于您要从响应 HTML 中提取的内容。


推荐阅读