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]
C'est un problème qui a déjà pris 4 pages de manière plus ou moins directement en t'indiquant que pour comprendre il faut apprendre...
Si tu comprenais ce que tu fais et que tu savais ce que t'attends comme résultat, tu saurais sans doute adapter ton code pour résoudre le problème.
Seulement tu donnes des morceaux de code adaptés selon les résultats que tu donnes, et dont on ne sait même pas si tu les as utilisé de la bonne manière. Parce-que l'on a pas le code que tu as testé (je parle pas du morceau de code mais le code entier), on a pas les erreurs de l'interpréteur, le code HTML qui permet de faire des tests de notre côté, etc... donc la seule solution est de comprendre Python, pour comprendre les erreurs et modifier le code python selon tes besoins.
Ce que chacun d'entre nous, plus ou moins brusquement, essayons de te faire comprendre... mais apparemment, 3 pages plus tard on en est toujours au même point, et ça pourrait encore durer longtemps... alors à quand la remise en question ? Combien de temps avant de comprendre que python ne s'apprend pas en un jour et combien de temps te faut-il pour comprendre qu'ici on ne donnera jamais un code complet sans que tu te sortes les doigts du ... ?
Prends les choses en main, tu veux un code python, soit tu payes un presta, soit tu vas sur ce type de forum tout en apprenant le langage Python.
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
18
19 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 = []; 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) if date_list: for av_date in re.findall(r"\"[0-9\-]+\"",date_list[0]) : print(av_date.replace('"','')) else : print("no available dates")[Running] python -u "C:\Users\eloua\AppData\Local\Temp\tempCodeRunnerFile.python"
no available dates
[Done] exited with code=0 in 0.72 seconds
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
18
19 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) if date_list: for av_date in re.findall(r"\"[0-9\-]+\"",date_list[0]) : print(av_date.replace('"','')) else : print("no available dates")Je pense que là c'est bon. maintenant puisque le input du datepicker est rempli par le js code dans le html de la page. comment pourrais renvoyer la premiere date capturée dans le input box et continuer? merci[Running] python -u "C:\Users\eloua\AppData\Local\Temp\tempCodeRunnerFile.python"
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
[Done] exited with code=0 in 0.724 seconds
Code : Sélectionner tout - Visualiser dans une fenêtre à part <input type="text" readonly="" class="form-control-input app_date validate" style="width: 260px;" id="app_date" name="app_date" placeholder="YYYY-MM-DD" onchange="this.form.submit();showLoader();" value="" autocomplete="off">
Hello,
Il faut arrêter la boucle par un break dès qu'une date est trouvée.
Exemple (à adapter) :
On pourrait aussi prendre le premier élément de la liste sans faire de boucle.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 dateValides = re.findall(r"\"[0-9\-]+\"",dateList[0]) if dateValides: for datelibre in dateValides: choixDate = datelibre.replace('"','') break print(choixDate)
Ami calmant, J.P
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 dateValides = re.findall(r"\"[0-9\-]+\"",dateList[0]) if dateValides: choixDate = dateValides[0].replace('"','') print(choixDate)
Bonjour @jurassic pork merci pour ton aide, donc
Tout ça c'est bien, mais comment faire pour renvoyer la première date par exemple dans l'input du datepicker
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 date_list = re.findall(r'var\s*available_dates\s*=\s*\[[^\]]+', html) if date_list: for av_date in re.findall(r"\"[0-9\-]+\"",date_list[0]) : print(av_date.replace('"','')) Break else : print("no available dates")
et continuer mon script pour remplir le formulaire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part <input type="text" readonly="" class="form-control-input app_date validate" style="width: 260px;" id="app_date" name="app_date" placeholder="YYYY-MM-DD" onchange="this.form.submit();showLoader();" value="" autocomplete="off">
A essayer ( en utilisant aussi selenium pour piloter un navigateur et pouvoir agir sur les contrôles de la page HTML) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 # date_list = re.findall(r'var\s*available_dates\s*=\s*\[[^\]]+', html) if date_list: choixDate = date_list[0].replace('"','') print(choixDate) driver.find_element(By.ID, "app_date").clear() driver.find_element(By.ID, "app_date").send_keys(choixDate) else : print("no available dates")
Je ne vois pas pourquoi tu continues…
Maintenant que tu as les dates, ton script peut directement t'envoyer un mail (voir sms), il ne te reste plus qu'à te connecter toi-même.
Cela répond déjà à la problématique que tu nous as donné au début dans ton premier sujet !
De plus, quand je lis la faq :
Vu ton niveau plus que faible en codage, tu ferais mieux d'abandonner l'inscription via robot. (en france, c'est impossible puisqu'il y a un contrôle du payeur)Dois-je payer le rendez-vous?
Oui, les candidats éligibles pour payer les rendez-vous doivent payer pour cela.
Comment puis-je payer le rendez-vous?
Le paiement du rendez-vous peut être effectué en utilisant n'importe quelle carte de débit ou de crédit émise par une banque marocaine.
Ce n'est pas moi qui ai soulevé la problématique citée dans la faq. Oui Maintenant que j'ai les dates il faut envoyer la première date capturée dans l'input du datepicker ( je ne sais pas si sendkeys() va marcher sachant qu'il y'a le paramètre onchange). L'idée de notifier par mail ou SMS est bonne. Pourriez-vous me donner des pistes ?
Hello,
Pour que l'événement OnChange soit déclenché il faut envoyer un "ENTER" dans le champ texte. Exemple :
Ami calmant, J.P
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 from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys ser = Service(r"D:\\Selenium\\WebDrivers\\chromedriver.exe") options = webdriver.ChromeOptions() options.add_argument("user-data-dir=D:\\Selenium\\Profil") #Path to your chrome profile w = webdriver.Chrome(service=ser, chrome_options=options) url1 = "https://www.w3.org/WAI/UA/TS/html401/cp0102/0102-ONCHANGE-INPUT.html" w.implicitly_wait(5) # seconds w.get(url1) w.find_element(By.NAME, 'orig').clear w.find_element(By.NAME, 'orig').send_keys('Ma date') w.find_element(By.NAME, 'orig').send_keys(Keys.ENTER) print("fin")
Partager