0
votes

Lecture d'un fichier Excel avec OpenPyXL en tant que formulaire de population utilisant le sélénium prend trop de temps

Je remplis un formulaire Web qui possède des champs de saisie, des menus déroulants, des champs d'autocomplete et des boutons d'action.

Je tire les données d'une feuille Excel utilisant OpenPyXL. Initialement, il utilisait entre 3 et 4 secondes pour peupler ces champs. Après avoir ajouté read_only = true à ma fonction ReadData, il s'est amélioré un peu mais pas comme prévu.

Est-ce que quelqu'un a des suggestions sur la manière dont je serais en mesure de réduire le temps nécessaire peupler chaque champ? Toute aide est vraiment appréciée. Je quitte la fonction ReadData ainsi que la population_Form que j'utilise pour remplir un champ de texte à titre d'exemple.

acclamations.

méthode pour lire chaque cellule: xxx


méthode pour remplacer le champ d'entrée: xxx


2 commentaires

Si vous augmenterait sûrement vos performances si vous chargez une fois au classeur et non à chaque fois lorsque lishata est appelé.


Une erreur recrue de mon côté mais après avoir retiré la pièce de chargement du code de la fonction, je ne vois pas une augmentation majeure de la performance. Je continuerai à rechercher des moyens d'améliorer les performances ou d'examiner peut-être une bibliothèque de différence pour extraire les données des XLS et l'alimenter sur le formulaire Web. Merci de votre aide.


3 Réponses :


1
votes

Essayez de mettre en œuvre la méthode READDATA à l'aide de la bibliothèque "XLRD".

Il ne fournit pas une API riche comme OpinPycyl mais je suis sûr que ça va courir plus vite.


1 commentaires

Merci pour cela, je regarderais certainement cette bibliothèque car je ne me soucie pas beaucoup de l'API, mais de la vitesse de lecture des données plutôt.



1
votes

Sauf si votre tableur est énorme, je suis assez certain que le wait_for_element et webdiverwait Les appels prennent le plus de temps.
Comme il a déjà été suggéré, essayez de mettre en cache les données de tableur (s) à l'aide d'une structure efficace, telle que: xxx

car il semble que vous ne disposez que d'un fichier que vous pouvez charger les données à l'aide de: xxx

Pour l'utiliser, vous appelez load_data (nom de fichier) une fois (lorsque votre application démarre) et accédez aux données chargées ultérieurement à l'aide de xls_data au lieu de readdata : xxx

ce qui précède lancera keerror si le nom la feuille < / em> est invalide ou indexerror pour une combinaison de la ligne invalide, .


4 commentaires

Je ne suis pas tout à fait sûr comment faire cela, mais je vais passer du temps à ce que j'ai vraiment besoin d'accélérer le processus car j'ai des enregistrements de 5k (lignes Excel) pour entrer dans ce formulaire Web.


J'ai fait l'essayer, merci pour ça. Bien que je ne sois pas sûr de savoir comment je voudrais l'utiliser car la fonction de données de charge que vous avez créée ne prend qu'un argument (nom de fichier) et je devrais l'utiliser dans ma fonction ReadData qui prend 4 arguments, voir ci-dessous: ReadData (nom de fichier, "CallCenter", Row_num, colonne_num)


J'ai ajouté plus de détails sur la manière dont vous pouvez utiliser la fonction load_data .


Merci pour votre aide, cela fonctionne bien. Bien que cela reste un peu lent (je travaille avec un fichier avec 500 rangées) et chaque fois que je dois peupler un champ ou une liste déroulante, je dois lire à partir de la feuille Excel. J'ai aussi besoin d'écrire sur ce même XLS afin que le read_only = true m'empêcherait d'écrire dans le même fichier. Je me demande s'il y a une autre bibliothèque similaire à OpenPyXL, ce qui me permettrait de lire simplement la ligne dont j'ai besoin, de stocker cela en mémoire (ou de créer un fichier temporaire) et ne lisez que de cette ligne tout au long du script.



1
votes

Lorsque vous remplissez un formulaire Web, à la fin, les données seront envoyées à un serveur avec une demande postale. Ce que je recommanderais, c'est d'utiliser E.G. Wireshark to capture cette demande postale. Analyser cette demande de voir ce qui est envoyé exactement au serveur. Ensuite, vous pouvez créer une telle demande de post à l'aide du module Demandes . Cela signifie que vous n'avez pas à gérer le sélénium du tout.

Et comme les autres ont mentionné, lisez le fichier Excel qu'une seule fois.


3 commentaires

J'ai déjà essayé cela, mais je travaille sur un site Web d'entreprise avec beaucoup de restrictions et je ne suis pas autorisé à faire des demandes d'obtention / poste. C'est pourquoi j'ai décidé de le faire avec le sélénium. Merci quand même pour la suggestion, c'est la meilleure option d'être juste tant que vous avez le bon accès.


Donc, ils font probablement beaucoup de validation de données dans JavaScript, et ils ne veulent pas que vous fassiez une fin de course autour de cela? :-)


C'est exactement ça :) Je continuerai à travailler sur cette demande de poste une fois que j'ai terminé avec le script sélénium en premier.