[PYTHON] Programme d'acquisition du marché Drakue 10 Bazaar créé en 20 minutes

introduction

Je travaille pour Drakue 10 en m'abstenant de le faire. Drakue 10 dispose d'un mécanisme appelé bazar des voyageurs, qui permet aux utilisateurs d'acheter et de vendre des articles. J'ai donc écrit un code simple pour obtenir les informations sur les prix du Traveler Bazaar à partir de Adventurer's Square et les coller sur la feuille Excel.

environnement

Windows10 Pro

Python 3.8.2

selenium 3.141.0

ChromeDriver 81.0.4044.69

openpyxl 3.0.3

code

config.py


USERID = 'Identifiant d'utilisateur'
PASSWORD = 'mot de passe'

bazaar.py


# -*- coding: utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
import re
import config
import openpyxl
import datetime

#Liste à stocker les informations
exhibition_data = []

options = webdriver.ChromeOptions()

#Mode sans tête
#options.add_argument('--headless')

#Spécifiez le chemin du pilote Web
driver = webdriver.Chrome(executable_path="chromedriver.exe", chrome_options=options)
#Rechercher une URL de destination
driver.get('https://hiroba.dqx.jp/sc/search/')

time.sleep(3)

#Entrée de la fenêtre de recherche
s = driver.find_elements_by_xpath('//*[@id="sqexid"]')
s[0].send_keys(config.USERID)
s = driver.find_elements_by_xpath('//*[@id="password"]')
s[0].send_keys(config.PASSWORD)

#Cliquez sur le bouton de connexion
driver.find_element_by_xpath('//*[@id="login-button"]').click()
driver.find_element_by_xpath('//*[@id="welcome_box"]/div[2]/a').click()
driver.find_element_by_xpath('//*[@id="contentArea"]/div/div[2]/form/table/tbody/tr[2]/td[3]/a').click()

#Chercher
time.sleep(2)

while True:

    print("Veuillez saisir le nom de l'article à rechercher:")
    #Stocke le nom de l'élément à rechercher
    search_word = input()

    #Quitter si rien n'est entré
    if search_word == "":
        print("Quitter le programme")
        break
    
    #Remplissez le formulaire de recherche
    s = driver.find_elements_by_xpath('//*[@id="searchword"]')
    s[0].send_keys(search_word)

    driver.find_element_by_xpath('//*[@id="searchBoxArea"]/form/p[2]/input').click()
    driver.find_element_by_xpath('//*[@id="contentArea"]/div/div[4]/table/tbody/tr/th/table/tbody/tr/td[3]/a').click()
    time.sleep(3)
    driver.find_element_by_xpath('//*[@id="btn_lock"]/a').click()
    time.sleep(5)

    #Acquisition des données d'inscription
    elements = driver.find_elements_by_tag_name('tr')
    
    #Stocker dans la liste
    for elem in elements:
        exhibition_data.append(elem.text.split())
    
    #Suppression des 5 premiers éléments inutiles
    del exhibition_data[:6]

    workbook = openpyxl.Workbook()
    sheet = workbook.active
    
    #Sortie vers une feuille Excel
    for i in range(len(exhibition_data)):
        for j in range(len(exhibition_data[i])):

            sheet.cell(row=i + 1, column=j + 1).value = exhibition_data[i][j]
    
    #Réinitialiser le contenu de la liste une fois
    del exhibition_data[:]

    #Enregistrer le fichier Excel
    workbook.save(search_word + "_" + datetime.datetime.now().strftime("%Y%m%d%H%M") + '.xlsx')

    #Fermer le classeur
    workbook.close()

#Fermer le pilote
driver.quit()

Tâche

Comme il s'agit d'un code simple, il est conçu pour n'obtenir que la première page du résultat et il n'y a pas de gestion des erreurs, je voudrais donc l'ajouter lors de son utilisation.

Recommended Posts

Programme d'acquisition du marché Drakue 10 Bazaar créé en 20 minutes
Environnement CSS créé en 10 minutes avec Django