68 lines
2.0 KiB
Python
68 lines
2.0 KiB
Python
|
import time
|
||
|
from multiprocessing import Pool
|
||
|
from pathlib import Path
|
||
|
from tempfile import TemporaryDirectory
|
||
|
from zipfile import ZipFile
|
||
|
|
||
|
from retry import retry
|
||
|
from selenium import webdriver
|
||
|
from selenium.webdriver.support import expected_conditions as EC
|
||
|
from selenium.webdriver.support.select import By, Select
|
||
|
from selenium.webdriver.support.wait import WebDriverWait
|
||
|
|
||
|
dir_ = Path(__file__).parent
|
||
|
|
||
|
PARTS = [
|
||
|
*[f"TSW-1{i:02d}-05-G-S" for i in range(1, 10)],
|
||
|
]
|
||
|
URL_STEP = "https://www.snapeda.com/parts/{0}/Samtec/embed/?ref=samtec"
|
||
|
|
||
|
|
||
|
@retry(tries=2, delay=1)
|
||
|
def download_step(part: str):
|
||
|
print(part)
|
||
|
with TemporaryDirectory(prefix=str(dir_ / "tmp")) as tmp:
|
||
|
tmp = Path(tmp)
|
||
|
|
||
|
chrome_options = webdriver.ChromeOptions()
|
||
|
chrome_options.add_experimental_option(
|
||
|
"prefs",
|
||
|
{"download.default_directory": str(tmp)},
|
||
|
)
|
||
|
chrome_options.add_argument("--headless")
|
||
|
|
||
|
with webdriver.Chrome(
|
||
|
options=chrome_options,
|
||
|
) as browser:
|
||
|
browser.get(URL_STEP.format(part.upper()))
|
||
|
wait = WebDriverWait(browser, 10)
|
||
|
wait.until(
|
||
|
EC.element_to_be_clickable(
|
||
|
browser.find_element(by=By.ID, value="download_traceparts_3d_model")
|
||
|
)
|
||
|
).click()
|
||
|
wait.until(
|
||
|
EC.element_to_be_clickable(
|
||
|
browser.find_element(
|
||
|
by=By.ID,
|
||
|
value="samtec-checkbox-3d-modal-download-individual-btn",
|
||
|
)
|
||
|
)
|
||
|
).click()
|
||
|
|
||
|
# wait for download to finish
|
||
|
while len(list((Path(tmp).glob("*.zip")))) == 0:
|
||
|
time.sleep(0.1)
|
||
|
|
||
|
# unzip
|
||
|
with ZipFile(list((Path(tmp).glob("*.zip")))[0]) as zip:
|
||
|
zip.extractall(path=str(tmp))
|
||
|
|
||
|
# move
|
||
|
filename = f"{part.upper()}.stp"
|
||
|
(Path(tmp) / filename).rename(dir_ / "3dshapes" / filename)
|
||
|
|
||
|
|
||
|
for part in PARTS:
|
||
|
download_step(part)
|