Как получить исходный HTML-код веб-страницы
Я использовал curl для очистки html-кода с определенного веб-сайта. затем они изменили настройки своего сервера, и curl больше не может получать содержимое страницы с кодом ошибки 1020, тогда я изменил свой скрипт на использование elinks.
но снова они теперь используют cloudflare, а elinks больше не работает (только на этом конкретном веб-сайте). и он дает тот же код ошибки 1020.
есть ли какая-либо командная строка или возможность использовать другие браузеры (firefox, chrome, google-chrome ...) и получить страницу html в терминале?
2 ответа
Если вы умеете писать сценарии для Node.js, вот небольшой пример с использованием библиотеки кукловода . Он регистрирует исходный код страницы после загрузки страницы в безголовом (невидимом) Chrome с динамическим контентом, генерируемым скриптами страницы:
import puppeteer from 'puppeteer';
const browser = await puppeteer.launch({ headless: false, defaultViewport: null });
try {
const [page] = await browser.pages();
await page.goto('https://example.org/');
console.log(await page.content());
} catch (err) { console.error(err); } finally { await browser.close(); }
Предлагаю вашему вниманию код и библиотеки обхода защиты Cloudflare:
Библиотеки:
npm i puppeteer-extra puppeteer-extra-plugin-stealth puppeteer
узелджс:
const puppeteer = require('puppeteer-extra')
const pluginStealth = require('puppeteer-extra-plugin-stealth')
const { executablePath } = require('puppeteer')
const link = 'https://www.g2.com/'
const getHtmlThoughCloudflare = async (url) => {
puppeteer.use(pluginStealth())
const result = await puppeteer
.launch({ headless: true })
.then(async (browser) => {
const page = await browser.newPage()
await page.goto(url)
const html = await page.content()
await browser.close()
return html
})
console.log(` HTML: ${result}`)
return result // html
}
getHtmlThoughCloudflare(link)