Skip to content

Instantly share code, notes, and snippets.

@yuizho
Last active February 16, 2016 16:11
Show Gist options
  • Save yuizho/3c0d37f7921cae4ce88b to your computer and use it in GitHub Desktop.
Save yuizho/3c0d37f7921cae4ce88b to your computer and use it in GitHub Desktop.
連盟の入力欄に入力するよくん
# -*- coding: utf-8 -*-
import lxml.html as lh
import argparse
import datetime
from urllib import request
def CALC_OLD(birth_year):
today = datetime.date.today()
year = today.year
if 1 <= today.month and 3 >= today.month:
year -= 1
return str(year - int(birth_year))
class DataReader():
def __init__(self, path):
self.path = path
def read_data(self):
with open(self.path, 'r') as f:
str = f.read()
return [s.split(',') for s in str.split('\n')][:-1]
class EntryEditor():
def __init__(self, url):
self.url = url
def retrieve_html(self):
with request.urlopen(self.url) as f:
self.html = f.read().decode('cp932')
return self
def inject_data(self, data_list):
row = lh.fromstring(self.html).xpath('//tr')[3:]
for i, tr in enumerate(row):
inputs = tr.xpath('./td//input')
try:
print(data_list[i])
if i == 0 or i == 1:
inputs[0].value = data_list[i][1]
inputs[1].value = CALC_OLD(data_list[i][2])
else:
inputs[0].value = data_list[i][0]
inputs[1].value = data_list[i][1]
inputs[2].value = CALC_OLD(data_list[i][2])
except:
continue
root = tr.getroottree()
self.html = lh.tostring(root).decode('cp932')
return self
def write_html(self):
with open('result.html', 'w', encoding='cp932') as f:
f.write(self.html)
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='urlのフォームをdataの内容で入力します')
parser.add_argument('-d', '--data', dest='data', required=True, help='データcsvファイルのパス')
parser.add_argument('-u', '--url', dest='url', required=True, help='フォームhtmlのurl')
args = parser.parse_args()
# print(args.data)
# print(args.url)
data_list = DataReader(args.data).read_data()
EntryEditor(args.url).retrieve_html().inject_data(data_list).write_html()
def inject_data(self, data_list):
row = lh.fromstring(self.html).xpath('//tr')[6:]
for i, tr in enumerate(row):
inputs = tr.xpath('./td//input')
try:
print(data_list[i])
if i == 0 or i == 1:
inputs[0].value = data_list[i][1]
inputs[1].value = CALC_OLD(data_list[i][2])
inputs[2].value = data_list[i][3]
inputs[3].value = data_list[i][4]
inputs[4].value = data_list[i][5]
else:
inputs[0].value = data_list[i][0]
inputs[1].value = data_list[i][1]
inputs[2].value = CALC_OLD(data_list[i][2])
inputs[3].value = data_list[i][3]
inputs[4].value = data_list[i][4]
inputs[5].value = data_list[i][5]
except:
continue
root = tr.getroottree()
self.html = lh.tostring(root).decode('cp932')
return self
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment