CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Selenium nodeJS/Python

cybevil
cybevil
Niveau 27
27 juin 2021 à 00:25:53

Bonjour, par curiosité, je me suis mis à utiliser Selenium ces jours-ci.
D'abord avec python, puis avec nodeJS.

J'ai écris un script assez simple permettant de récupéré une liste de titre d'un site donnée, seulement je n'arrive pas à transposer une partie du code que j'ai réalisé en python vers nodeJS.

La partie en question est celle-ci :

options.add_argument("--disable-web-security")
options.add_argument("--disable-site-isolation-trials")

Elle me provoque l'erreur suivante que j'ai réussi à corriger en python :

DevTools listening on ws://127.0.0.1:63723/devtools/browser/44034948-f90d-4e86-aee1-1df02e655335[0627/001618.220:INFO:CONSOLE(0)] "Access to fetch at 'https://comasoiling.casa/cuid/' from origin 'https://www.japscan.ws' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: The value of the 'Access-Control-Allow-Origin' header in the response must not be the wildcard '*' when the request's credentials mode is 'include'.", source: https://www.japscan.ws/ (0)

Si quelqu'un a une piste ça m'aiderait grandement, merci.

Python

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options

url = "https://www.japscan.ws"

options = Options()
options.add_argument("--disable-web-security")
options.add_argument("--disable-site-isolation-trials")
options.headless = True

driver = webdriver.Chrome(options=options)
driver.get(url)

# Actions
mangas_list = driver.find_elements(By.XPATH,"//div[@id='chapters']/div[@class='tab-pane container active']/h3/a")

for manga in mangas_list:
    print(manga.text)
    
driver.close()

NodeJS

let chrome = require('selenium-webdriver/chrome');
let {Builder} = require('selenium-webdriver');

let driver = new Builder()
    .forBrowser('chrome')
    .setChromeOptions(new chrome.Options().headless())
    .build();

driver.get('https://www.japscan.ws/');
Azerban
Azerban
Niveau 16
27 juin 2021 à 19:31:10

Je ne saurais te conseiller pour Node.js mais je ne comprends pas pourquoi tu utilises selenium en l'espèce (à moins que ce ne soit juste pour t'exercer).

Tu peux juste faire une requête sur le site, récupérer le HTML et le parser avec BeautifulSoup en Python pour extraire les liens des derniers mangas (ce sera beaucoup plus rapide). Il n'y a aucune protection sur le site.

N'oublie pas d'installer prettytable (pip install prettytable) pour avoir un truc joli.

from urllib.parse import urljoin

import requests
from bs4 import BeautifulSoup
from prettytable import PrettyTable

url = "https://www.japscan.ws/"

CSS_SELECTOR = "div#chapters div.tab-pane.container.active h3 a"

tableau = PrettyTable()
tableau.field_names = ['TITRE', 'LIEN']
tableau.align['LIEN'] = 'l'

response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")

for manga in soup.select(CSS_SELECTOR):
    title = manga.text
    link = urljoin(url, manga['href'])
    tableau.add_row([title, link])

print(tableau)
cybevil
cybevil
Niveau 27
27 juin 2021 à 19:56:50

Le 27 juin 2021 à 19:31:10 :
Je ne saurais te conseiller pour Node.js mais je ne comprends pas pourquoi tu utilises selenium en l'espèce (à moins que ce ne soit juste pour t'exercer).

Tu peux juste faire une requête sur le site, récupérer le HTML et le parser avec BeautifulSoup en Python pour extraire les liens des derniers mangas (ce sera beaucoup plus rapide). Il n'y a aucune protection sur le site.

N'oublie pas d'installer prettytable (pip install prettytable) pour avoir un truc joli.

from urllib.parse import urljoin

import requests
from bs4 import BeautifulSoup
from prettytable import PrettyTable

url = "https://www.japscan.ws/"

CSS_SELECTOR = "div#chapters div.tab-pane.container.active h3 a"

tableau = PrettyTable()
tableau.field_names = ['TITRE', 'LIEN']
tableau.align['LIEN'] = 'l'

response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")

for manga in soup.select(CSS_SELECTOR):
    title = manga.text
    link = urljoin(url, manga['href'])
    tableau.add_row([title, link])

print(tableau)

Oui effectivement c'était surtout pour m'exercer j'entends parler des navigateurs headless depuis un moment et je voulais essayer, à thermes j'aimerais créer une page en local qui scrapperais mes titre mais également l'image de couverture(pour créer une page d'accueil plus conviviale), seulement les images ne sont accessible qu'après un clique sur le liens du manga.

Corrige moi si je me trompe mais avec BeautifulSoup je ne pense pas pouvoir récupérer mes images qui sont toutes sur une page différente c'est pourquoi je pensais plutôt utiliser selenium.

Message édité le 27 juin 2021 à 19:58:27 par cybevil
Azerban
Azerban
Niveau 16
27 juin 2021 à 21:03:34

Pour récupérer des images avec BeautifulSoup il te suffit de "suivre" le lien (la balise a). Tu auras une nouvelle page et de nouveau tu scrapes la nouvelle page et tu cherches par exemple les balises img.

Quand je dis suivre le lien c'est juste récupérer le lien de la balise a et faire une requête à cet endpoint.

Message édité le 27 juin 2021 à 21:05:42 par Azerban
cybevil
cybevil
Niveau 27
27 juin 2021 à 22:04:38

Le 27 juin 2021 à 21:03:34 :
Pour récupérer des images avec BeautifulSoup il te suffit de "suivre" le lien (la balise a). Tu auras une nouvelle page et de nouveau tu scrapes la nouvelle page et tu cherches par exemple les balises img.

Quand je dis suivre le lien c'est juste récupérer le lien de la balise a et faire une requête à cet endpoint.

D'accord merci, je regarderais ça plus en détail avec BeautifulSoup.
Dans mes souvenir j'étais resté bloqué sur l'accès aux éléments d'un lien mais je réessayerais.

J'ai résolu l'erreur de NodeJs un peu par chance en modifiant la structure de mon code, je passe donc mon topic en résolu et je poste le code qui fonctionne pour laisser une trace :

NodeJS

const webdriver = require('selenium-webdriver'), By = webdriver.By;
const chrome = require('selenium-webdriver/chrome');
const map = webdriver.promise.map;

const driver = new webdriver.Builder()
    .forBrowser('chrome')
    .setChromeOptions(new chrome.Options().headless())
    .build();

driver.get('https://www.japscan.ws');

let titres = [];

pause(2, Scraping);

function pause(Time, funcName) {
    setTimeout(funcName, Time * 1000);
}

function QuitDriver() {
    driver.close();
    driver.quit();
    pause(3, OperationsAfterScraping);
}

function Scraping() {
    console.log('Scraping the page...');

    let XPATH = '//div[@id=\'chapters\']/div[@class=\'tab-pane container active\']/h3/a';
    let resultats = driver.findElements(By.xpath(XPATH));

    map(resultats, e => e.getText()).then(function(texts) {
        titres = texts;
    });

    pause(3, QuitDriver);
}

function OperationsAfterScraping() {
    console.log('----------');
    console.log('Operations');
    console.log('----------');
    console.log(titres);
}
Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Internet
  • Macintosh
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware
La vidéo du moment