#bash #selenium #curl #wget #dos
#selenium #curl #selenium-chromedriver #wget #geckodriver
Вопрос:
В последние несколько дней я пытался автоматизировать сохранение из командной строки следующей страницы в виде таблицы или текстового файла, используя такие инструменты, как wget или curl, но безуспешно. Проблемы возникают также из-за того, что URL-адрес замаскирован. Мне было интересно, есть ли возможность сделать это с помощью таких инструментов, как selenium.
https://www.hkex.com.hk/Market-Data/Securities-Prices/Equities?sc_lang=en
Перед сохранением страницы в виде таблицы необходимо выполнить в основном две операции:
a) Щелкните один раз на «20 элементах» в правом нижнем углу и доведите его до «100 элементов»
б) Нажмите 10 раз на ссылку «ЗАГРУЗИТЬ БОЛЬШЕ» в нижней части страницы, чтобы увеличить количество отображаемых элементов
Я был бы очень признателен за любые предложения о том, как решить эту задачу. Спасибо за ваше внимание.
Комментарии:
1. Вы пробовали puppeteer? github.com/puppeteer/puppeteer
2. Это может помочь: Функция загрузки программных данных — Спецификация интерфейса API
3. @masterguru Спасибо, что указали на это. Выглядит как интересный инструмент, но, я думаю, у него довольно крутая кривая обучения.
4. @Cyrus. спасибо, что указали на этот ресурс, но их API позволяет извлекать данные только для отдельных элементов. Поэтому мне нужно было бы сделать около 1000 вызовов, чтобы получить все нужные мне элементы, создавая нагрузку на их систему.
Ответ №1:
Самым простым способом было бы использовать playwright — https://playwright.dev/python/docs/intro
Затем нажмите кнопку записи — playwright codegen
Сохранение содержимого страницы / Экспорт в pdf
Вы можете сохранить скрипт, а затем повторно запустить его позже — python hkex.py
пример сценария
from playwright.sync_api import Playwright, sync_playwright
def run(playwright: Playwright) -> None:
browser = playwright.chromium.launch(headless=False)
context = browser.new_context()
# Open new page
page = context.new_page()
# Go to https://www.hkex.com.hk/Market-Data/Securities-Prices/Equities?sc_lang=en
page.goto("https://www.hkex.com.hk/Market-Data/Securities-Prices/Equities?sc_lang=en")
# Click #accpet_cookie_btn
page.click("#accpet_cookie_btn")
# Click text=20 Items
page.click("text=20 Items")
# Click :nth-match(:text("Items"), 4)
page.click(":nth-match(:text("Items"), 4)")
# Click text=LOAD MORE
page.click("text=LOAD MORE")
# Click text=LOAD MORE
page.click("text=LOAD MORE")
# Click text=LOAD MORE 100 Items 20 Items 50 Items 100 Items
page.click("text=LOAD MORE 100 Items 20 Items 50 Items 100 Items")
# Click text=LOAD MORE
page.click("text=LOAD MORE")
# Click text=LOAD MORE
page.click("text=LOAD MORE")
# Click text=Equity Overview LIST OF SECURITIES EQUITIES ETPs DWs INLINE WARRANTS CBBCs REITs
page.click("text=Equity Overview LIST OF SECURITIES EQUITIES ETPs DWs INLINE WARRANTS CBBCs REITs")
# Click .back_to_top_btn
page.click(".back_to_top_btn")
# assert page.url == "https://www.hkex.com.hk/Market-Data/Securities-Prices/Equities?sc_lang=en#hkex_page_header"
# Click text=Equity Overview LIST OF SECURITIES EQUITIES ETPs DWs INLINE WARRANTS CBBCs REITs
page.click("text=Equity Overview LIST OF SECURITIES EQUITIES ETPs DWs INLINE WARRANTS CBBCs REITs")
# Click #lhkexw-equities div:has-text("FILTERS EQUITIES ETPs DWs INLINE WARRANTS CBBCs REITs DEBT SECURITIES Filters EQ")
page.click("#lhkexw-equities div:has-text("FILTERS EQUITIES ETPs DWs INLINE WARRANTS CBBCs REITs DEBT SECURITIES Filters EQ")")
# Click #lhkexw-equities div:has-text("FILTERS EQUITIES ETPs DWs INLINE WARRANTS CBBCs REITs DEBT SECURITIES Filters EQ")
page.click("#lhkexw-equities div:has-text("FILTERS EQUITIES ETPs DWs INLINE WARRANTS CBBCs REITs DEBT SECURITIES Filters EQ")")
# Click text=LOAD MORE
page.click("text=LOAD MORE")
# ---------------------
context.close()
browser.close()
with sync_playwright() as playwright:
run(playwright)
Комментарии:
1. Выглядит как интересный подход, но я бы предпочел и в этом случае что-то с менее крутой кривой обучения. В любом случае спасибо.
2. Я запустил ваш скрипт, и он делает все, что мне нужно, но не сохраняет страницу в виде таблицы или текстового файла. Можно ли завершить ваш скрипт, добавив эту функцию? Еще раз спасибо за вашу помощь и содействие.