如何通过网页抓取填表?
How to pass through form filling with web-scratching?
如何通过网站登录表单查看HTML网站上任何相关网页的代码。
我试图通过网站上的登录表单,然后解析保存我的帐户信息的 html 页面,但我无法这样做。
这是我的代码。
const express = require('express');
const fs = require('fs'); //access to file system
const request = require('request');
const cheerio = require('cheerio');
const rp = require('request-promise');
const app = express();
let url = 'url';
(request.post({url:'url1', form: {
email:'email',
password:'password'
}},
function(error, response, html){
if(error){
console.log(error);
}
else{
console.log(html);
}
}))
app.get('/scrape', function(req, res){
requestToWork(url);
res.send('Check your console!')
})
function requestToWork(url){
return rp(url)
.then(HTMLresponse=>{
const $ = cheerio.load(HTMLresponse);
console.log($.text());
$('.ellipsis').each((i, element) => {
console.log(element);
});
})
}
app.listen('8080')
console.log('Listening port 8080');
exports = module.exports = app;
它只是从登录页面向我记录 HTML 代码。我想登录另一个页面。
问题是,cheerio
无法关注新的 url。
在您的特定情况下,有两种可能的解决方案:
1. 使用浏览器登录网站,通过开发人员工具访问 cookie,并将它们复制到您的 request
。来自 documentation.
的类似内容
2.使用自动无头浏览器,可以跟随页面重定向。并保留您的 session 数据。喜欢 puppeteer or selenium.
如果您已经在使用 node.js,使用 puppeteer 实现逻辑会更容易。
Here 是关于 puppeteer 的更多信息。
更新
傀儡师:
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://example.com');
// Now you have two ways
// First one with evaluate, to access page DOM
await page.evaluate(() => {
// Here you have access to DOM. So you can make any JS DOM operations, you wish.
const form = document.querySelector('form');
const email = document.querySelector('email');
// ...some actions
form.submit();
})
// The second one, with puppeteer helper functions
const email = await page.$('email');
// Type function will type text in input
await elementHandle.type('some text');
// press function will emulate enter button press.
await elementHandle.press('Enter');
await page.waitFor(1500);
// Here you have result of your auth procedure.
// After all your operations, just close the browser.
await browser.close();
})();
Here是人偶类型
如果我们正在寻找 request
实现。
首先,我们必须得到cookie。
您可以通过 this chrome 扩展程序提取 cookie,或者转到开发工具,Network
选项卡,单击第一条记录并在 [=] 中查找 Cookie
header 17=] 部分。
直接复制
然后,在代码中从 official documentation:
执行 request
const j = request.jar();
// Here 'key1=value1' change with your cookie from browser
const cookie = request.cookie('key1=value1');
const url = 'http://www.google.com';
j.setCookie(cookie, url);
request({url: url, jar: j}, function () {
request('http://images.google.com')
})
如何通过网站登录表单查看HTML网站上任何相关网页的代码。
我试图通过网站上的登录表单,然后解析保存我的帐户信息的 html 页面,但我无法这样做。 这是我的代码。
const express = require('express');
const fs = require('fs'); //access to file system
const request = require('request');
const cheerio = require('cheerio');
const rp = require('request-promise');
const app = express();
let url = 'url';
(request.post({url:'url1', form: {
email:'email',
password:'password'
}},
function(error, response, html){
if(error){
console.log(error);
}
else{
console.log(html);
}
}))
app.get('/scrape', function(req, res){
requestToWork(url);
res.send('Check your console!')
})
function requestToWork(url){
return rp(url)
.then(HTMLresponse=>{
const $ = cheerio.load(HTMLresponse);
console.log($.text());
$('.ellipsis').each((i, element) => {
console.log(element);
});
})
}
app.listen('8080')
console.log('Listening port 8080');
exports = module.exports = app;
它只是从登录页面向我记录 HTML 代码。我想登录另一个页面。
问题是,cheerio
无法关注新的 url。
在您的特定情况下,有两种可能的解决方案:
1. 使用浏览器登录网站,通过开发人员工具访问 cookie,并将它们复制到您的 request
。来自 documentation.
的类似内容
2.使用自动无头浏览器,可以跟随页面重定向。并保留您的 session 数据。喜欢 puppeteer or selenium.
如果您已经在使用 node.js,使用 puppeteer 实现逻辑会更容易。
Here 是关于 puppeteer 的更多信息。
更新
傀儡师:
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://example.com');
// Now you have two ways
// First one with evaluate, to access page DOM
await page.evaluate(() => {
// Here you have access to DOM. So you can make any JS DOM operations, you wish.
const form = document.querySelector('form');
const email = document.querySelector('email');
// ...some actions
form.submit();
})
// The second one, with puppeteer helper functions
const email = await page.$('email');
// Type function will type text in input
await elementHandle.type('some text');
// press function will emulate enter button press.
await elementHandle.press('Enter');
await page.waitFor(1500);
// Here you have result of your auth procedure.
// After all your operations, just close the browser.
await browser.close();
})();
Here是人偶类型
如果我们正在寻找 request
实现。
首先,我们必须得到cookie。
您可以通过 this chrome 扩展程序提取 cookie,或者转到开发工具,Network
选项卡,单击第一条记录并在 [=] 中查找 Cookie
header 17=] 部分。
直接复制
然后,在代码中从 official documentation:
request
const j = request.jar();
// Here 'key1=value1' change with your cookie from browser
const cookie = request.cookie('key1=value1');
const url = 'http://www.google.com';
j.setCookie(cookie, url);
request({url: url, jar: j}, function () {
request('http://images.google.com')
})