Проблема в том, что он отлично работает только тогда, когда я делаю это вручную, а при попытке использовать 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("
except:
print("
continue
# Czekamy aż strona załaduje nagłówek modelu
try:
WebDriverWait(driver, 15).until(
EC.presence_of_element_located((By.CSS_SELECTOR, "h1"))
)
print("
except:
print("
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("
except:
print("
# 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("
except:
print("
# 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
def main():
serials = ["52B9Y93"] #
Подробнее здесь: https://stackoverflow.com/questions/798 ... ot-loading
Мобильная версия