Python/Selenium-спеціалісти, допоможіть будь ласка

Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті

Доброго дня шановне ком’юніті. Є практична задача — треба зберегти більше тисячі сторінок динамічного сайту, в котрого не змінюється урл. Структура приблизно наступна сайт/трейнінг і там питання і варіанти відповідей, при натисканні кнопку перевірки після вибору свого варіанта підсвічюється зеленим вірний і червоним якщо обрано не вірний. При натисканні на кнопку — Наступне — знову нове питяння і варіанти (відправляється get запит, структура урла лишається незмінною сайт/трейнінг). Сберігати сторінки важливо саме в html, бо текстовий формат не дасть зрозуміти де вірна відповідь, а де ні. Так от треба зібрати таку базу питань та вірних відповідей. Вручну зберігати 1000 сторінок це якось задовго. Перше що спало на думку це задіяти Python+Selenium. Знайдені в інтернеті рішення не спрацювали:

в першому проблеми з page_source

www.tutorialspoint.com/...​encoding with the codecs — пкод відпрацьовує, але створює пусту сторінку, в консолі помилка

    h = webdriver.page_source
AttributeError: module 'selenium.webdriver' has no attribute 'page_source'

в другому з модулем ahk

stackoverflow.com/...​sing-selenium-with-python

import ahk
ModuleNotFoundError: No module named ’ahk’

якщо є ідеї як змусити хоча б запрацювати скрипти (в ідеалі додати цикл щоб само натискало кнопоки і зберігало кожну сторінку з унікальним ім’ям) — велками. Або є якісь інщі ідеї як можна зпарсити всі питання і відповіді з зазначенням вірних і не вірних варіантів і збереження в csv — теж велкам)

👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Всім дякую за поради, особливо за ті де на запитання як забити цим молотком цей цвях радили взяти замість молотка ложку/виделку/трактор бо це теж дуже гарні інструменти:)
Мені важливо було не метод, а кінцевий результат. Але це заставило мене додатково дослідити як можна вирішити задачу найменшими для мене зусиллями. З’ясував що get запити мають вигляд https://%site.org%/Training/Next?id=1, то ж виникла ідея отримати всі відповіді у вигляді json файлів методом пербору. Це дозволило обійтись без Selenium і без навігації по сторінці. додатвово нагуглив приклад коду і довів його до робочого стану. Можливо ще комусь згодиться.

 from pathlib import Path
import codecs
import requests
dir_path = Path('C:\\Users\\%username%\\Desktop\\print_dir')
i = 0
while i <int(10):
    file_name = 'mydocument{}.json'.format(i + 1)
    url = "https://%site.org%/Training/Next?id={}".format(i + 1)
    r = requests.get(url)
    #if dir_path.is_dir():
    with codecs.open(dir_path.joinpath(file_name), 'w+', "utf−8") as file:
        file.write(r.text)
    i = i + 1
    print(url)
    file_name= file_name
    print(file_name)
else:
    print('Happy End')
PS — тепер я знаю чому DOU це навколоайтішний ресурс, а не ресурс для розробників — вставити картинку — пекло, вставити код цоб він виглядав як код — пекло в квадраті)))

Коментар порушує правила спільноти і видалений модераторами.

як вже писали, краще юзати Playwright.
я на Go написав на колінці за 5хв, думаю в Python зробити те саме не буде проблем — go.dev/play/p/qds6rnPXq2I
важливо — pdf-генерація в плейрайті працює тільки в хромі і тільки в headless режимі

Краще використати playwright. Він більш зручний як на мене.

Помилка виникає тому що webdirver це модуль і в нього дійсно немає такого атрибуту. Атрибут page_source є в інстансу webdriver.Chrome() з наведеного туторіалу. Тому потрібно

webdriver.page_source

замінити на

driver.page_source

.

selenide.org — дууже простенька для розуміння ліба для автоматизації браузера.
Гляньте в розділ Quick Start, там навіть відео є як легко почати роботу.

Або є якісь інщі ідеї як можна зпарсити всі питання

Напівавтоматичне рішення: ви можете написати просте Chrome розширення, яке буде додавати на сторінку кнопку «Зберегти» й кожен раз при натиску буде зберігати потрібні елементи сторінки.

Є практична задача — треба зберегти більше тисячі сторінок динамічного сайту, в котрого не змінюється урл.

Таке дійсно парсити складно.

я ручний тестувальник, тому

ви можете написати просте Chrome розширення

 — то точно не про мене)

Підписатись на коментарі