Saya telah mencoba untuk mendapatkan berita utama dari Hacker News, meskipun contoh dari situs web mana pun bisa dilakukan.

Omong-omong, ini kode saya:


let getHTML = function (url, callback) {

    // Feature detection
    if (!window.XMLHttpRequest) return;

    // Create new request
    let xhr = new XMLHttpRequest();

    // Setup callback
    xhr.onload = function () {
        if (callback && typeof (callback) === 'function') {
            callback(this.responseXML);
        }
    };

    // Get the HTML
    xhr.open('GET', url);
    xhr.responseType = 'document';
    xhr.send();

};

getHTML('https://news.ycombinator.com/news', function (response) {
    let someElem = document.querySelector('#someElementFromMyPage');
    let someOtherElem = response.querySelector('#someElementFromOtherPage');
    someElem.innerHTML = someOtherElem.innerHTML;
});

Ini harus menampilkan elemen dari laman lain dan membawanya ke laman saya.

2
jlhs 23 April 2020, 03:29

1 menjawab

Jawaban Terbaik

Ketika saya menjalankan kode Anda, saya mendapatkan kesalahan CORS di konsol dev-tools browser (detail lebih lanjut di sini).

image

Masalah

Pada dasarnya situs web target (https://news.ycombinator.com/news) membatasi cara Browser dapat memintanya. Dan browser mematuhi dan menghormati pembatasan ini.

  1. Kode JS membuat permintaan.
  2. Browser membaca respons dan melihat header HTTP yang disertakan dalam respons dari (https://news.ycombinator.com /berita)
  3. Karena ada X-Frame-Options: DENY dan X-XSS-Protection: 1 mode=block, browser tidak mengizinkan Anda membaca permintaan dalam kode JS, jadi Anda mendapatkan kesalahan.

enter image description here

Solusi

Ada banyak opsi untuk mengatasi kesalahan CORS, Anda dapat menelitinya sendiri:

  • Permintaan saluran melalui server proxy, merutekan permintaan CORS melalui server lain yang menghapus header CORS sial. mungkin ini?

  • Jalankan server untuk pengikisan web, server tidak harus menghormati Header seperti yang dilakukan browser, jadi Anda bisa MENDAPATKAN apa saja. mungkin coba ini

Menggores di dalam browser semakin sulit, jadi Anda perlu menggunakan solusi lain untuk mengambil konten dari situs lain.

Semoga ini membantu!

1
Ben Winding 23 April 2020, 00:55