Части веб-сайта Dell/поддержки не загружаются [закрыто]Python

Программы на Python
Ответить
Anonymous
 Части веб-сайта Dell/поддержки не загружаются [закрыто]

Сообщение Anonymous »

Я работаю в службе поддержки, и мне было поручено записать информацию о гарантии и характеристиках ЦП/ОЗУ/дисков ноутбуков Dell. У меня есть сотни таких задач, поэтому я загорелся идеей автоматизировать это в Selenium.
Проблема в том, что он отлично работает только тогда, когда я делаю это вручную, а при попытке использовать Selenium некоторый контент страницы не хочет загружаться. Например вручную на этой странице гарантия, а спецификация товара загружается нормально. Но в Selenium гарантийный заполнитель и спецификация продукта (после его ввода) вообще не загружаются. Пытался сделать это в Selenium, без головы, с завершением Playwright с тем же результатом.
Пример сервисного тега: FTB7MT2
Код:
`
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chromium import options
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from bs4 import BeautifulSoup
import openpyxl
import time
import os
import re

DELL_HOME = "https://www.dell.com/support/home/en-us?app=products"

def scrap_dell(serials):
options.headless = False
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
options.headless = False
driver.maximize_window()
results = []

for serial in serials:
print(f"\n➡ Przetwarzam Service Tag: {serial}")

driver.get(DELL_HOME)
time.sleep(1)

# Pole wyszukiwania Service Tag
try:
search_box = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "mh-search-input"))
)
search_box.clear()
search_box.send_keys(serial)
search_box.send_keys(Keys.ENTER)
print("✅ Service Tag wpisany")
except:
print("❌ Nie znaleziono pola wyszukiwania")
continue

# Czekamy aż strona załaduje nagłówek modelu
try:
WebDriverWait(driver, 15).until(
EC.presence_of_element_located((By.CSS_SELECTOR, "h1"))
)
print("✅ Strona urządzenia załadowana")
except:
print("❌ Nie udało się załadować strony urządzenia")
continue

# Klikamy przycisk "Specyfikacje produktu"
try:
specs_btn = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.ID, "review-specs-drawer-trigger"))
)
specs_btn.click()
print("✅ Kliknięto Specyfikacje produktu")
except:
print("❌ Nie znaleziono przycisku Specyfikacje produktu")

# Czekamy aż sekcja z gwarancją się pojawi
try:
warr_div = WebDriverWait(driver, 300).until(
EC.presence_of_element_located((By.ID, "tt_warstatus_text"))
)
print("✅ Sekcja gwarancji załadowana")
except:
print("❌ Nie udało się załadować sekcji gwarancji")

# Dodatkowy wait dla akordeonów
time.sleep(3)

soup = BeautifulSoup(driver.page_source, "html.parser")

data = {
"Model": None,
"Serial": serial,
"CPU": None,
"RAM": None,
"Dysk": None,
"Gwarancja": None
}

# MODEL
header = soup.find("h1")
if header:
data["Model"] = header.get_text(strip=True)
print("✔ Model:", data["Model"])

# GWARANCJA
warr = soup.find("div", id="tt_warstatus_text")
if warr:
warr_text = warr.get_text(strip=True).lower()
if "ended" in warr_text or "wygas" in warr_text:
data["Gwarancja"] = "NIE"
else:
data["Gwarancja"] = "TAK"
print("✔ Gwarancja:", data["Gwarancja"])

# SPECYFIKACJA — AKORDEONY
accordion_items = soup.find_all("div", class_=re.compile("dds_accordion_item"))

for item in accordion_items:
btn = item.find("button", class_="dds_accordion_button")
if not btn:
continue

text = btn.get_text(" ", strip=True)

# CPU
if ("intel" in text.lower() or "ryzen" in text.lower()) and not data["CPU"]:
data["CPU"] = text
print("✔ CPU:", data["CPU"])

# RAM
if ("gb" in text.lower() and "mhz" in text.lower()) and not data["RAM"]:
data["RAM"] = text
print("✔ RAM:", data["RAM"])

# DYSK
if any(x in text.lower() for x in ["ssd", "hdd", "nvme"]) and not data["Dysk"]:
data["Dysk"] = text
print("✔ Dysk:", data["Dysk"])

results.append(data)

driver.quit()
return results

def save_excel(data, file="dell_laptops.xlsx"):
if os.path.exists(file):
os.remove(file)

wb = openpyxl.Workbook()
ws = wb.active
ws.append(["Model", "Serial", "Specyfikacja", "Gwarancja"])

for row in data:
spec = f"{row['CPU']}; {row['RAM']}; {row['Dysk']}"
ws.append([row["Model"], row["Serial"], spec, row["Gwarancja"]])

wb.save(file)
print(f"\n📁 Wynik zapisany w pliku: {file}")

def main():
serials = ["52B9Y93"] #

Подробнее здесь: https://stackoverflow.com/questions/798 ... ot-loading
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»