Текущий неавтоматизированный процесс выглядит следующим образом:
Нужно зайти в браузер и открыть специальную ссылку;
Нужно выбрать из выпадающего списка свой логин;
Выбрать папку с файлами и сами файлы, которые будут загружаться;
Дальше для каждого окошка появляются формы для заполнения, например: первый файл называется Автор - Книга.doc
, под этим название есть две формы для заполнения: "Автор: "; "Книга";
Руками копируется "Автор" в форму для заполнения; руками копируется "Книга" в форму для заполнения - так для каждого отдельного загружаемого файла;
После того как все формы с "Авторами" и "Книгами" заполнены нажимается кнопка "Загрузить";
По результатам загрузки появляется окно "Загрузка завершена": "Автор - Книга".... и эту информацию нужно скопировать, например, в эксель файл.
Вопрос: можно ли написать программу, которая автоматизирует этот процесс - чтобы она сама заполняла формы по стандартизированному название (между автором и книгой всегда могут стоять "пробел дефис пробел); чтобы копировала и заносила информацию в эксель; чтобы, перемещала загруженные файлы из одной папки в другую.
Из навыков программирования только VBA excel. Хочется также понять, что конкретно и в каких языках программирования стоит изучить, чтобы суметь сделать подобную программу. Предпочтительно на Python. И был бы очень признателен за ответы на то, как решить последовательные кусочки этой довольной большой задачи и где можно прочитать ответы, чтобы эти кусочки работали: как заполнять формы в браузере, используя имя файла "Автор - Книга.doc" над этими формами? Как выбирать логин из списка? и др.
Вместо того, чтобы пытаться повторить действия пользователя с GUI буквально, можно взглянуть на задачу глазами программиста:
request.post()
)Path().glob("*.doc")
)Author - Title.doc
в элементы формы, выставляются требуемые параметры запроса напрямую (http заголовки X-Book-Author
, X-Book-Title
в примере). Сами метаданные из имени файла можно получить манипулируя строку с именем напрямую: fn.split('-')
или с помощью регулярных выражений: r'^([^-]+?)\s*-\s*(.+)\.doc$'
csv.writer(sys.stdout)
) Что легко в файл скопировать (| tee -a books.csv
)Конечный скрипт, который загружает файлы с книгами, может выглядеть так:
#!/usr/bin/env python3
'''Upload "<author> - <title>.doc" books from the given directory.
Usage: upload-books <dir-path> | tee -a books.csv
'''
import csv
import re
import sys
from pathlib import Path
import requests # $ pip install requests
if len(sys.argv) < 2:
sys.exit(__doc__)
src_dir = sys.argv[1]
book_files = []
for path in Path(src_dir).glob('*.doc'):
metadata = re.findall(r'^([^-]+?)\s*-\s*(.+)\.doc$', path.name)
if not metadata:
print("warning: can't find author, title in path:", path, file=sys.stderr)
continue # don't upload
book_files[str(path)] = (path.name, path.open('rb'), 'application/msword',
dict(zip("X-Book-Author X-Book-Title".split(), metadata[0])))
r = requests.post('https://example.com/api/v1/books', files=book_files,
auth=('user', 'passwd'))
csv.writer(sys.stdout).writerows(r.json()['books']) # save uploaded books info
Это в хорошем случае, когда у сайта есть явное API или спонтанно сформировавшийся набор http запросов/ответов, не требует выполнения динамического кода в браузере (или когда результаты этого выполнения могут быть легко смоделированы).
В менее удачном случае, когда, например, за загрузку книг ответчает Silverlight control, который использует какой-нибудь свой протокол для общения с сервером, то может быть проще использовать инструменты GUI автоматизации такие как pywinauto, pyautogui или AutoIt (упомянутый в ответе на схожий вопрос на Stack Overflow).
В промежуточном случае, интерфейс реализован в браузере на javascript и работу с ним можно автоматизировать, используя что-нибудь вроде Selenium WebDriver (+ headless chrome).
Наиболее распространенным средством для таких целей является curl. Например, для формы с полями name, age и town команда должна вроде такой:
curl -d Name="HarryP" -d Age="123" -d Town="DefaultCity" -d Form_Submit="Send" http://www.example.com/process-form.php
Виртуальный выделенный сервер (VDS) становится отличным выбором
Как мне получить данные из Lua скрипта в С++ коде? Как понимаю обмен данными из скрипта в плюсы идет через особый LUA-СтекПомогите разобраться,...
я новичок в android, и у меня вопрос: можно ли получать (при помощи service) адрес на который пользователь переходит в браузере?