Obtenez et automatisez le contrôle ASP Datepicker à l'aide de Python et Selenium

Cet article utilise Python 3.6.0 et Selenium 3.4.0 (WebDriver est Google Chrome).

J'ai eu du mal à obtenir le contrôle Datepicker (calendrier déroulant) créé par ASP, je vais donc laisser une note.

Le contrôle Datepicker est Table

Le contrôle Datepicker est un contrôle qui descend le calendrier lorsque l'utilisateur clique dessus. Lorsque j'ai vérifié le contrôle abandonné avec Google Chrome, j'ai constaté qu'il était composé de balises Table. Par conséquent, il peut être obtenu dans l'ordre suivant.

  1. Cliquez sur le contrôle Datepicker
  2. Obtenez la balise de table de calendrier générée
  3. Faites ce que vous voulez faire

Échantillon pour obtenir la date automatiquement en précisant la date

J'ai créé une fonction qui clique sur la date correspondante lorsque la date souhaitée est spécifiée.

DatepickerMove.py



#Transmettez la variable où la page avec le contrôle Datepicker est récupérée au navigateur
#Assurez-vous que le contrôle Datepicker est cliqué avant d'exécuter la fonction

def DatepickerMove(browser, year, month, day):
    #Cliquez sur le titre pour afficher l'écran de sélection année / mois
    calendar_title = browser.find_element_by_id('CalendarExtender1_title')
    calendar_title.click()

    calendar_prev = browser.find_element_by_id('CalendarExtender1_prevArrow')
    calendar_next = browser.find_element_by_id('CalendarExtender1_nextArrow')

    time.sleep(1)
    #Vérifiez l'année. S'il est différent, déplacez-le dans le sens correspondant en fonction de la taille
    #Limiter la boucle en cas d'emballement
    limit_count = 100
    for i in range(limit_count):
        if calendar_title.text == year:
            break
        elif calendar_title.text > year:
            calendar_prev.click()
        elif calendar_title.text < year:
            calendar_next.click()
    else:
        print('Le nombre spécifié de processus a été dépassé')
        return

    time.sleep(1)

    #Obtenez mensuellement
    month_title = year + 'Année' + month + 'Mois'
    calendar_month = browser.find_element_by_xpath('//div[@title=\"' + month_title + '\"]')
    calendar_month.click()

    time.sleep(1)

    #Obtenez la date
    day_title = month_title + day + 'journée'
    calendar_day = browser.find_element_by_xpath('//div[@title=\"' + day_title + '\"]')
    calendar_day.click()

    time.sleep(1)

Pourquoi vous cliquez sur le titre

DatepickerMove.py



browser.find_element_by_id('CalendarExtender1_title')
calendar_title.click()

calendar_prev = browser.find_element_by_id('CalendarExtender1_prevArrow')
calendar_next = browser.find_element_by_id('CalendarExtender1_nextArrow')

Cliquer sur le champ Datepicker générera un calendrier pour la date (c'est-à-dire un calendrier régulier). Si vous cliquez sur le titre (par exemple, la partie qui dit "Avril 2017") Cette fois, l'année et janvier-décembre peuvent être sélectionnés à la place de la date. L'agencement de janvier à décembre est différent de la date, car il comporte 12 boutons et l'agencement est fixe et facile à manipuler. Il a changé une fois pour l'état de l'année et du mois.

Nous avons également un élément qui passe à l'année précédente et à l'année suivante lorsque vous cliquez dessus.

Pourquoi cliquer sur l'année précédente et l'année suivante pour sélectionner l'année

DatepickerMove.py



    limit_count = 100
    for i in range(limit_count):
        if calendar_title.text == year:
            break
        elif calendar_title.text > year:
            calendar_prev.click()
        elif calendar_title.text < year:
            calendar_next.click()
    else:
        print('Le nombre spécifié de processus a été dépassé')
        return

Si vous cliquez sur le titre de la même manière que ci-dessus, l'année deviendra sélectionnable. Cependant, étant donné que la disposition des années change en fonction de l'année en cours, j'ai pensé qu'il serait plus sûr de faire une boucle et de vérifier chaque année, alors je n'ai pas beaucoup réfléchi.

Pourquoi est-il obtenu à partir du titre avec XPath?

DatepickerMove.py



    #Obtenez mensuellement
    month_title = year + 'Année' + month + 'Mois'
    calendar_month = browser.find_element_by_xpath('//div[@title=\"' + month_title + '\"]')
    calendar_month.click()

    time.sleep(1)

    #Obtenez la date
    day_title = month_title + day + 'journée'
    calendar_day = browser.find_element_by_xpath('//div[@title=\"' + day_title + '\"]')
    calendar_day.click()

Dans le cas d'une date, la date du mois précédent peut être sélectionnée en fonction du calendrier. Par exemple, si vous essayez d'obtenir le 25 mars 2017 et spécifiez 25 dans le texte, vous obtiendrez le 25 février 2017. Par conséquent, j'ai pensé qu'il serait plus sûr de sélectionner le titre avec le nom complet, alors j'ai fait cela.

en conclusion

Cela fait moins d'un mois que j'ai appris Python pour la première fois, le codage peut donc être un problème. Cependant, c'est un langage amusant dans lequel vous pouvez facilement faire diverses choses, même avec une expérience peu profonde.

Recommended Posts

Obtenez et automatisez le contrôle ASP Datepicker à l'aide de Python et Selenium
Obtenez et définissez la valeur du menu déroulant en utilisant Python et Selenium
J'ai essayé le web scraping en utilisant python et sélénium
Programmation Python: j'ai essayé d'obtenir (l'exploration) des articles de presse en utilisant Selenium et BeautifulSoup4
Automatisez Chrome avec Python et Selenium sur votre Chromebook
Récupérer des fichiers depuis Linux en utilisant paramiko et scp [Python]
Commencez à Selenium en utilisant python
Contrôle d'instruments à l'aide de Python [pyvisa]
[python] Obtenir le quotient et le surplus
Défiez Python3 et Selenium Webdriver
La communication I2C est effectuée en contrôlant la communication série avec python (à l'aide d'un périphérique USBGPIO8)
Obtenez une traduction en anglais à l'aide de python google translation selenium (Remarque)
Contrôle de la communication série avec communication python et SPI (à l'aide d'un périphérique USBGPIO8)
Authentification à l'aide de l'authentification des utilisateurs tweepy et de l'authentification d'application (Python)
Grattage avec Python, Selenium et Chromedriver
Comment obtenir des abonnés et des abonnés de Python à l'aide de l'API Mastodon
Clustering et visualisation à l'aide de Python et CytoScape
Sélénium et python pour ouvrir Google
Obtenez et estimez la forme de la tête en utilisant Dlib et OpenCV avec python
Notes utilisant cChardet et python3-chardet dans Python 3.3.1.
Python> dictionnaire> values ()> Obtenir toutes les valeurs à l'aide de values ()
Obtenir l'équilibre Suica en Python (en utilisant libpafe)
Utilisation de Python et MeCab avec Azure Databricks
[Ingénierie de contrôle] Représentation graphique des fonctions de transfert par Python
Obtenez des signets Twitter sur CentOS en utilisant Selenium
Obtenez des données Youtube en Python à l'aide de l'API Youtube Data
Redémarrez le routeur en utilisant Python, Selenium, PhantomJS
Pratiquer le web scraping avec Python et Selenium
J'utilise tox et Python 3.3 avec Travis-CI
Estimation de l'orientation de la tête avec Python et OpenCV + dlib
Remarques sur l'installation de Python3 et l'utilisation de pip sous Windows7
Développer et déployer des API Python à l'aide de Kubernetes et Docker
[Python] Obtenez tous les commentaires à l'aide de Youtube Data Api
Essayez d'exécuter Google Chrome avec Python et Selenium
Flux de développement Python avec Poetry, Git et Docker
J'ai essayé la détection d'objets en utilisant Python et OpenCV
Obtenir l'URL de l'image à l'aide de l'API Flickr en Python
Obtenez le nom de la branche git et le nom de la balise avec python
Obtenir des informations sur les notes à l'aide du SDK Evernote pour Python 3
Créer une carte Web en utilisant Python et GDAL
Faites glisser et déposez un fichier local avec Selenium (Python)
Contrôlons les moteurs et capteurs EV3 avec Python
[Python3] Génération automatique de texte avec janome et markovify
Essayez d'utiliser tensorflow ① Créez un environnement python et introduisez tensorflow
Obtenez l'objet et le corps de Gmail avec Python et l'API Gmail
Essayez d'utiliser l'API ChatWork et l'API Qiita en Python
Je souhaite obtenir des attributs de données personnalisés de HTML sous forme d'éléments à l'aide de Python Selenium
J'ai essayé d'automatiser la mise à jour de l'article du blog Livedoor avec Python et sélénium.