我想在Oui
或Non
按钮上单击时得到this webpage及以下文本,并将它们存储为json文件:
我愿意使用javascript和python解决方案。我尝试了以下方法之一:
'use strict';
const puppeteer = require('puppeteer');
(async function main() {
try {
const browser = await puppeteer.launch();
const [page] = await browser.pages();
await page.goto('http://www.leparisien.fr/elections/municipales/municipales-a-paris-notre-simulateur-pour-savoir-quel-candidat-vous-correspond-le-mieux-05-03-2020-8273238.php');
const pollFrame = page.frames().find(
frame => frame.url() === 'https://livemixr-assets.s3-eu-west-1.amazonaws.com/quel-candidat/index.html'
);
// getting first question
const data = await pollFrame.evaluate(
() => document.querySelector('html > body > div > div > div > div > div:nth-child(5) > h4').innerText
);
console.log(data);
// clicking on an answer
await page.$x('/html/body/div/div/div[1]/div/div[5]/div/div/label[1]')
const elements = await page.$x('/html/body/div/div/div[1]/div/div[5]/div/div/label[1]')
await elements[0].click()
// getting second question
const data2 = await pollFrame.evaluate(
() => document.querySelector('html > body > div > div > div > div > div:nth-child(5) > h4').innerText
);
console.log(data2);
await browser.close();
} catch (err) {
console.error(err);
}
})();
获得第一个文本,单击一个按钮,获得第二个文本。 但是出现了以下错误:
C:\Users\antoi\Documents\Programming\Scraping>node scraper.js
Faut-il accélérer l’automatisation du métro ?
TypeError: Cannot read property 'click' of undefined
at main (C:\Users\antoi\Documents\Programming\Scraping\scraper.js:24:23)
at processTicksAndRejections (internal/process/task_queues.js:94:5)
那么如何从带有伪造者的网页中提取文本?
答案 0 :(得分:1)
page.evaluate()
(或frame.evaluate()
)来获取文档数据会更容易。例如:
'use strict';
const puppeteer = require('puppeteer');
(async function main() {
try {
const browser = await puppeteer.launch();
const [page] = await browser.pages();
await page.goto('http://www.leparisien.fr/elections/municipales/municipales-a-paris-notre-simulateur-pour-savoir-quel-candidat-vous-correspond-le-mieux-05-03-2020-8273238.php');
await page.waitForSelector('iframe[src="https://livemixr-assets.s3-eu-west-1.amazonaws.com/quel-candidat/index.html"]');
const pollFrame = page.frames().find(
frame => frame.url() === 'https://livemixr-assets.s3-eu-west-1.amazonaws.com/quel-candidat/index.html'
);
const data = await pollFrame.evaluate(() => {
const texts = [];
while (document.querySelector('div.ant-modal-content') === null) {
texts.push(document.querySelector('div:nth-child(5) > h4').innerText);
document.querySelectorAll('input[type="radio"]')[1].click();
// or: document.querySelector('input[type="radio"][value="Non"]').click();
}
return texts;
});
console.log(data);
await browser.close();
} catch (err) {
console.error(err);
}
})();
输出:
[
'Faut-il accélérer l’automatisation du métro ?',
'Faut-il faire payer le stationnement des deux-roues ?',
'Faut-il interdire les bus de tourisme dans la capitale ?',
'Faut-il piétonniser les quatre arrondissements centraux de la capitale ?',
'Faut-il réduire le nombre de places de stationnement en surface ?',
"Faut-il rendre le Vélib' gratuit ?",
'Faut-il renforcer la vidéoverbalisation ?',
'Faut-il rouvrir à la circulation les voies sur berges ?',
'Faut-il interdire les trottinettes électriques ? (free floating)',
'Le périphérique doit-il...',
'Les transports doivent-ils être rendus gratuits...',
"Faut-il demander l'annulation des Jeux olympiques ?",
'Faut-il mettre fin à la pratique du tirage au sort pour le conservatoire ?',
'Faut-il augmenter le nombre de caméras de vidéo-surveillance dans la rue ?',
'Faut-il créér une police municipale ?',
'Le future police municipale doit-elle être armée ?',
"Faut-il augmenter le montant des amendes (jets de mégots, urine, dépôt d'ordures...) ?",
'Faut-il privatiser le ramassage des déchets ?',
'À Paris, la société Airbnb doit-elle être ...',
'Faut-il baisser le nombre de nuitées autorisées à la location sur Airbnb (120 jours actuellement) ?',
"Faut-il maintenir l'encadrement des loyers?",
"En priorité, l'accès au logement social doit-il être attribué ...",
'Faut-il accroître le nombre de logements sociaux ?',
'En matière de finances, faut-il ...',
'Faut-il interdire les animaux sauvages dans les cirques ?',
'Faut-il proposer une alternative végétarienne tous les jours dans les cantines ?',
'Faut-il piétonniser les abords des écoles ?',
"Quelle est la priorité pour améliorer l'environnement ?",
'En cas de grèves, faut-il un service minimum pour les crèches et les écoles ?',
'Faut-il revenir à la semaine de 4 jours dans les écoles ?',
'Les tarifs des cantines scolaires doivent-ils ... ?',
'Faut-il étendre le travail du dimanche ?'
]