-1
votes

Comment gratter les éléments dynamiques invisibles sans selenium?

Je travaille sur une connexion simulée sur Nike.com . Le contenu de la connexion est dynamique, ce qui signifie qu'il a été défini invisible dans les codes source: xxx pré>

Après avoir analysé le code source, j'ai trouvé le code source JavaScript suivant peut être lié au problème: P>

  if (mexUniteContainer && mexUniteContainer.classList.contains('hidden')) {
      mexUniteContainer.classList.remove('hidden');
    }


4 commentaires

Pouvez-vous partager votre URL si elle est publique?


@Kunduk Nike.com


Quel navigateur essayez-vous? Je ne peux voir aucune pop-up chrome ou firefox? Pouvez-vous poster un instantané de votre popup modulaire?


@Kunduk Cliquez sur Joindre / Connectez-vous à Nike sur le coin supérieur droit. Le formulaire de connexion est une fenêtre contextuelle que vous ne pouvez pas afficher dans le code source.


3 Réponses :


1
votes

Utilisez webDriverwait suivant> XPath pour accéder au formulaire de connexion.

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver=webdriver.Chrome()
driver.get('https://www.nike.com/')
WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.XPATH,'//div[@id="AccountNavigationContainer"]//button//span[contains(.,"Join / Log In To Nike⁠Plus Account")]'))).click()
WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.XPATH,'//input[@placeholder="Email"]'))).send_keys('pajarnas')
WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.XPATH,'//input[@placeholder="Password"]'))).send_keys('pajarnas')


5 commentaires

@pajarnas spécifiant ce que à utiliser serait plus utile.


@jhpratt Demandes?


@pajarnas qui vous obtient simplement la page, cela n'analyse rien.


J'ai mis à jour ma question, j'espère que ce sera plus clair!


Je pense que Splash m'a aidé à comprendre.



1
votes

Peut-être webbot? WebBot fonctionne même des pages Web qui ont une carte d'identification et des noms de classe de manière dynamique et disposent de plus de méthodes et de fonctionnalités que de sélénium ou de mécanisier.

Voici un extrait :) p>

import requests
url = 'http://example.com/userinfo.php'
values = {'username': 'user',
          'password': 'pass'}

r = requests.post(url, data=values)
print r.content


2 commentaires

J'ai essayé mais ça marche toujours avec selenium! J'ai mis à jour ma question, j'espère que ce sera plus clair!


Je pense que Splash m'a aidé à comprendre.



0
votes

splashjs fonctionne pour moi. Splash est un service de rendu JavaScript. C'est un navigateur Web léger avec une API HTTP, implémenté dans Python 3 à l'aide de Twisted et de QT5. Le réacteur QT (torsadé) est utilisé pour rendre le service entièrement asynchrone permettant de tirer parti de la concurrence WebKit via la boucle principale QT. Certaines des fonctionnalités de Splash:

  • Processez plusieurs pages Web en parallèle;
  • Obtenez des résultats HTML et / ou prenez des captures d'écran;
  • Désactivez des images ou utilisez Adblock Plus des règles pour rendre le rendu plus rapide;
  • Exécuter JavaScript personnalisé dans le contexte de la page;
  • Écrivez des scripts de navigation Lua;
  • Développez des scripts Splash Lua dans les ordinateurs portables Splash-Jupyter.

0 commentaires