Проблемы с парсингом python

В парсерах я новичок. Может быть я чего то не понимаю, но в сети ответа так и не нашёл. Пытаюсь спарсить, ну например, инвентарь стим, стандартный набор: selenium/requests_html, которые умеют парсить с js, и BeautifulSoup. Но в итоге я получаю не полную страницу, которую вижу в браузере. Ок, пытаюсь разобраться, смотрим код страницы, Network -> XHR, ошибка, инициатор jquery-1.11.1.min.js... На сколько я понял, он запрашивает json, адрес понятен, так же могу этот json спарсить (https://steamcommunity.com/inventory/76561198113737845/440/2?l=russian&count=75). Ну а дальше то что? Как мне получить те данные, что я вижу в браузере, но которые не получаю через парсер? Я понимаю, что та информация, что мне нужна, уже есть в этом json, и с помощью регулярок я без проблем могу их от туда достать. Но мне нужна именно полноценная html страница, тк в json файле нет информации, например, о кол-ве одинаковых вещей.

#!/usr/bin/env python3
#-*- coding: utf-8 -*-

from selenium import webdriver
from bs4 import BeautifulSoup
import time

link = 'https://steamcommunity.com/profiles/76561198113737845/inventory/#252490'

driver = webdriver.Chrome(executable_path='E:\\steam_pars\\chromedriver.exe')
options = webdriver.ChromeOptions()
options.add_argument('--disable-blink-features=AutomationControlled')  # отключаем режим Webdriver

try:
    driver.get(url=link)
    time.sleep(10)
    steam_html = driver.page_source
    soup = BeautifulSoup(steam_html, 'lxml')
    block = soup.find('h1', class_='hover_item_name')
    with open('test.html', 'w', encoding='utf-8') as file:  # сохраняем страницу на всякий случай
        file.write(steam_html)
    print('*' * 10)
    print(block.text)  # естественно пустая строка 
    print('*' * 10)
except Exception as ex:
    print(ex)

finally:
    driver.close()
    driver.quit()

Ответы (2 шт):

Автор решения: DreamSeller

Я нашел ответ на свой вопрос:

html_with_all_content = driver.execute_script("return document.body.innerHTML;")
→ Ссылка
Автор решения: Igor

Как улучшить код.

Ниже — доработанная версия скрипта, которая:

  • Ждёт, пока инвентарь реально загрузится (а не просто спит 10 секунд).
  • Получает итоговый HTML через JS.
  • Корректно закрывает драйвер.
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from bs4 import BeautifulSoup

link = 'https://steamcommunity.com/profiles/76561198113737845/inventory/#252490'

options = Options()
options.add_argument('--disable-blink-features=AutomationControlled')
options.add_argument('--headless')  # можно убрать, если хочешь видеть браузер

service = Service('E:\\steam_pars\\chromedriver.exe')
driver = webdriver.Chrome(service=service, options=options)

try:
    driver.get(link)

    # ждём, пока появятся элементы с классом hover_item_name (они появляются после AJAX)
    WebDriverWait(driver, 20).until(
        EC.presence_of_element_located((By.CLASS_NAME, "hover_item_name"))
    )

    # получаем HTML через JS
    html_with_all_content = driver.execute_script("return document.body.innerHTML;")
    soup = BeautifulSoup(html_with_all_content, 'lxml')

    # пример извлечения
    items = soup.find_all('div', class_='item')
    print(f"Найдено элементов: {len(items)}")

    with open('test_full.html', 'w', encoding='utf-8') as file:
        file.write(html_with_all_content)

except Exception as ex:
    print("Ошибка:", ex)

finally:
    driver.quit()
→ Ссылка