Di https://www.popcornflix.com/channels/details/actionthrillers, saya 'm mencoba untuk mendapatkan link yang browser pergi ke saat Anda mengklik film. Pemilih untuk film pertama adalah:

#main-view > div > ui-view > div > div > div:nth-child(2) > div > div.ng-scope > div > div:nth-child(1)

Tetapi sepertinya tidak ada href di mana pun di dalam div itu, jadi saya berasumsi setiap kali Anda mengkliknya, itu akan disetel oleh javascript dengan atribut 'ng-klik'. Ini adalah elemen itu sendiri:

<div class="grid-item-container grid-video-container thumbrow-item ng-scope" ng-repeat="item in vm.items" ng-include="&quot;includes/movie-card-item.html&quot;" ng-click="vm.onItemClick($event, $index, item)"></div>

Bagaimana cara mendapatkan URL tanpa harus mengkliknya terlebih dahulu? Atau adakah cara untuk memaksanya membuka tautan di tab lain? Saya mencoba untuk tidak meninggalkan tab saat ini. Terima kasih sebelumnya

2
james pow 4 Juli 2020, 19:51

1 menjawab

Jawaban Terbaik

Seperti yang sudah Anda duga: itu hanya mungkin untuk mengumpulkan tautan dengan otomatisasi browser jika Anda mengeklik tautan lalu menyimpan url saat ini.

Anda hanya dapat membuka paksa tautan pada tab baru jika Anda menggunakan browser.newPage dan page.goto beberapa kali. Tetapi perlu mengetahui daftar tautan, apa yang belum Anda miliki.

Dalam teori

Jika Anda ingin mengambil tautan, Anda dapat mempelajari URL halaman film, bagaimana struktur URL, maka Anda dapat menggabungkannya dalam format baseurl + path + slug. Misalnya.:

const url = 'https://www.popcornflix.com/' + 'movie/' + '18-v0b12bzgha2f-mutant-chronicles'

(Parameter URL tidak wajib untuk mengakses halaman)

Setiap aplikasi satu halaman diberi umpan dari titik akhir api yang sebagian besar tersedia di jaringan browser, jadi dalam hal ini ng-click dilakukan berdasarkan data JSON yang berasal dari api. Dengan upaya reverse engineering minimal, Anda dapat mengambil slug halaman dari JSON.

const apiURLpattern = '...'
let apiResponse
page.on('response', async response => {
  if (response.url().includes(apiURLpattern)) {
    apiResponse = await response.json()
    }
  })
await page.goto(...

... dalam teori.

Sayangnya itu tidak diizinkan oleh pemilik situs: https://www.popcornflix. com/pages/about/a/terms

15. Penggunaan Situs yang Dilarang.

(o) Anda setuju untuk tidak merekayasa balik, mendekompilasi, membongkar atau mencoba untuk menemukan kode sumber Situs atau bagiannya, kecuali dan hanya sejauh aktivitas tersebut secara tegas diizinkan oleh hukum yang berlaku terlepas dari batasan ini.

Paragraf istilah yang sama juga tidak mengizinkan pengikisan:

(j) Anda setuju bahwa Anda tidak akan menggunakan robot, laba-laba, pengikis, atau sarana otomatis lainnya untuk mengakses Situs untuk tujuan apa pun tanpa izin tertulis sebelumnya dari kami atau melewati header pengecualian robot kami atau tindakan lain yang mungkin kami gunakan untuk mencegah atau membatasi akses ke Situs.

Saran

Saya sarankan untuk menghubungi pemilik dan meminta akses ke API mereka jika Anda membutuhkannya untuk keperluan pribadi. Atau jika Anda memerlukan detail film: api TMDb gratis untuk digunakan dan memiliki basis data besar: https://developers.themoviedb. org/3

1
theDavidBarton 4 Juli 2020, 19:05