on ne sait pas, essaie et dis nous (regarde ce que vaut script pour te faire une idée si ça peut marcher ou pas)
on ne sait pas, essaie et dis nous (regarde ce que vaut script pour te faire une idée si ça peut marcher ou pas)
Hello,
il y a un truc louche dans le script javascript de ton premier message : La variable available_dates n'est pas modifiée dans le script donc elle doit avoir la valeur de son initialisation donc on devrait retrouver sa valeur dans le code source javascript de la page HTML et pas besoin d'exécuter du javascript.
[EDIT] pour extraire les dates du code source html on peut essayer quelque chose comme ceci :
Ami calmant, J.P
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 import re with open('D:/Dev/test/testjs.html') as f: htmlString = f.read() print(htmlString) dateList = re.findall(r"AvailableDates\s*=\s*\[[^\]]+", htmlString) print(dateList[0]) dateValides = re.findall(r"\"[0-9\-]+\"",dateList[0]) print(dateValides)
2 - 3 on lit un fichier HTML et on le met dans une chaîne mais à la place on peut directement récupérer le code HTML avec selenium
5 - on capture la chaîne qui commence par available_dates suivi de = et de [ (\s dans le cas où il y a des espaces) et qui ne contient pas ] (fin de la chaîne à capturer)
7 - on capture dans cette chaîne les dates qui se trouvent entre les guillemets
output:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 import re html = """ <script type="text/javascript"> var dt4 = '2019-03-07'; var blocked_dates = ["20-03-2019","01-01-1970","28-03-2019","29-03-2019","20-03-2019","01-01-1970","28-03-2019","29-03-2019"]; var available_dates = ["07-03-2019","08-03-2019","11-03-2019","12-03-2019","13-03-2019","14-03-2019","15-03-2019","18-03-2019","19-03-2019","21-03-2019","22-03-2019","25-03-2019","26-03-2019","27-03-2019"]; var fullCapicity_dates = []; var offDates_dates = ["09-03-2019","10-03-2019","16-03-2019","17-03-2019","20-03-2019","23-03-2019","24-03-2019","28-03-2019","29-03-2019","30-03-2019","31-03-2019"]; var allowArray = [1]; </script> """ date_list = re.findall(r'AvailableDates\s*=\s*\[[^\]]+', html) print(date_list[0]) av_dates = re.findall(r'\"[0-9\-]+\"', date_list[0]) print(av_dates)
[Running] python -u "C:\Users\eloua\AppData\Local\Temp\tempCodeRunnerFile.python"
Traceback (most recent call last):
File "C:\Users\eloua\AppData\Local\Temp\tempCodeRunnerFile.python", line 15, in <module>
print(date_list[0])
~~~~~~~~~^^^
IndexError: list index out of range
[Done] exited with code=1 in 0.94 seconds
Si la liste est vide peut être faut-il revoir comment a été écrit available_dates...
- W
Mon Tutoriel sur la programmation «Python»
Mon Tutoriel sur la programmation «Shell»
Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
Et on poste ses codes entre balises [code] et [/code]
output :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 import re html = """ <script type="text/javascript"> var dt4 = '2019-03-07'; var blocked_dates = ["20-03-2019","01-01-1970","28-03-2019","29-03-2019","20-03-2019","01-01-1970","28-03-2019","29-03-2019"]; var available_dates = ["07-03-2019","08-03-2019","11-03-2019","12-03-2019","13-03-2019","14-03-2019","15-03-2019","18-03-2019","19-03-2019","21-03-2019","22-03-2019","25-03-2019","26-03-2019","27-03-2019"]; var fullCapicity_dates = []; var offDates_dates = ["09-03-2019","10-03-2019","16-03-2019","17-03-2019","20-03-2019","23-03-2019","24-03-2019","28-03-2019","29-03-2019","30-03-2019","31-03-2019"]; var allowArray = [1]; </script> """ date_list = re.findall(r'var\s*available_dates\s*=\s*\[[^\]]+', html) av_dates = re.findall(r'\"[0-9\-]+\"', date_list[0]) print(av_dates[0]
je pense que l'argument [0] ressort la première date dans la variable available_dates. maintenant la question est comment est ce que je pourrais introduite une boucle dans le cas ou la varibale available_dates est vide []; pour que le script ne s'arrete pas jusqu'à ce qu'il trouve une date et qu'il la sélectionne .merci pour vos efforts[Running] python -u "C:\Users\eloua\AppData\Local\Temp\tempCodeRunnerFile.python"
"07-03-2019"
[Done] exited with code=0 in 0.65 seconds
Tu en as des questions !!! Jamais tu prends un tuto et tu le lis en reproduisant les exemples qui t'apprendraient à trouver tout seul???
Et si toi tu en faisais un peu de ton côté des efforts?...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 tant que True (boucle infinie); faire lire html récupérer availables_dates si available_dates non vide alors break fin faire traiter availables_dates
Mon Tutoriel sur la programmation «Python»
Mon Tutoriel sur la programmation «Shell»
Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
Et on poste ses codes entre balises [code] et [/code]
A méditer:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 dateValides = re.findall(r"\"[0-9\-]+\"",dateList[0]) if len(dateValides) > 0: for datelibre in dateValides: print(datelibre.replace('"',''))
Ben... en méditant très fortj'arrive à cette conclusion que déjà tu peux remplacer par if dateValides ce qui simplifie l'écriture (tout ensemble de longueur non nulle est assimilable à True et un ensemble ne peut pas avoir de longueur négative).
Mais ensuite comme il n'y a pas de "else" alors en fait le test ne sert à rien et peut carrément disparaitre. La boucle sera alors initiée mais comme la liste est vide, ne se fera pas.
for datelibre in re.findall(r"\"[0-9\-]+\"",dateList[0]): print(datelibre.replace('"','')).
Mon Tutoriel sur la programmation «Python»
Mon Tutoriel sur la programmation «Shell»
Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
Et on poste ses codes entre balises [code] et [/code]
ce n'était qu'une indication pas une solutionet sans recherche d'optimisation
non? Histoire d'actualiser la page du calendrier ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 else: Driver.refresh()
C'est toi qui dirige ton code, pas ton code qui te dirige. Ma remarque concernait un code d'exemple dans lequel il n'y a pas d'alternative d'écrite mais en effet, rien ne t'interdit de rajouter une alternative de ton choix dans le cas où dateValides est vide. Cependant, perso je pense que si on doit rafraichir, alors on rafraichit dans tous les cas et pas seulement dans le cas où dateVaides est vide. Sait-on jamais, des rendez-vous peuvent se ibérer entre temps...
Mon Tutoriel sur la programmation «Python»
Mon Tutoriel sur la programmation «Shell»
Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
Et on poste ses codes entre balises [code] et [/code]
Que j'ai une vision très lointaine donc mes suggestions peuvent effectivement ne pas correspondre à ton but que tu connais mieux que moi.
Ah ben ça correspond justement à mon algo précédent
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 tant que True (boucle infinie); faire rafraichir calendrier lire calendrier récupérer availables_dates si available_dates non vide alors break fin faire traiter availables_dates et continuer le remplissage du formulaire
Mon Tutoriel sur la programmation «Python»
Mon Tutoriel sur la programmation «Shell»
Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
Et on poste ses codes entre balises [code] et [/code]
j'ai essayé ca mais le code ne s'arrête pas et aucun output
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 date_list = re.findall(r'var\s*available_dates\s*=\s*\[[^\]]+', html) while True: for datelibre in re.findall(r"\"[0-9\-]+\"",date_list[0]): print(datelibre[0].replace('"','')) break else : print("no available dates")
Partager