Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save Cushychicken/6f7b2bd3060f8d434365fca464b7a7d2 to your computer and use it in GitHub Desktop.
Save Cushychicken/6f7b2bd3060f8d434365fca464b7a7d2 to your computer and use it in GitHub Desktop.
Javascript bookmarklet to extract component data from a Digikey page.

Here's a Javascript bookmarklet that will extract component data from Digikey, for when you're building a bill of materials.

Saves just a little bit of copy/paste.

javascript:(function() {
    var url = window.location.href.toLowerCase();
    var dist = url.includes("digikey") ? "DigiKey" : url.includes("mouser") ? "Mouser" : "";
    var fieldMapping = {
        "DigiKey Part Number": "DistPN",
        "Manufacturer": "Mfg",
        "Manufacturer Product Number": "MfgPN"
    };
    var finalFields = ["Dist", "DistPN", "Mfg", "MfgPN", "Datasheet", "Description", "Detailed Description"];
    var data = {};
    if (dist) {
        data['Dist'] = dist;
    }
    let rows = document.querySelectorAll('tbody.MuiTableBody-root tr');
    rows.forEach(row => {
        let cells = row.querySelectorAll('td');
        if (cells.length > 1) {
            let key = cells[0].innerText.trim();
            let value = cells[1].querySelector('a') ? cells[1].querySelector('a').href : cells[1].innerText.trim();
            let values = value.split('\n').map(v => v.trim()).filter(v => v);
            if (key === "DigiKey Part Number" && values.some(v => v.endsWith("Cut Tape (CT)"))) {
                value = values.find(v => v.endsWith("Cut Tape (CT)"));
                data[fieldMapping[key] || key] = value;
            } else if (values.length > 1) {
                data[fieldMapping[key] || key] = values[0];
            } else {
                data[fieldMapping[key] || key] = value;
            }
        }
    });
    var filteredData = {};
    finalFields.forEach(field => {
        if (data[field]) {
            filteredData[field] = data[field];
        }
    });
    navigator.clipboard.writeText(JSON.stringify(filteredData, null, 2));
    alert('Data copied to clipboard as JSON!');
})();

Here it is as a oneliner so you can copy it into a Bookmark bar.

javascript:(function(){var url=window.location.href.toLowerCase();var dist=url.includes("digikey")?"DigiKey":url.includes("mouser")?"Mouser":"";var fieldMapping={"DigiKey Part Number":"DistPN","Manufacturer":"Mfg","Manufacturer Product Number":"MfgPN"};var finalFields=["Dist","DistPN","Mfg","MfgPN","Datasheet","Description","Detailed Description"];var data={};if(dist){data['Dist']=dist;}let rows=document.querySelectorAll('tbody.MuiTableBody-root tr');rows.forEach(row=>{let cells=row.querySelectorAll('td');if(cells.length>1){let key=cells[0].innerText.trim();let value=cells[1].querySelector('a')?cells[1].querySelector('a').href:cells[1].innerText.trim();let values=value.split('\n').map(v=>v.trim()).filter(v=>v);if(key==="DigiKey Part Number"&&values.some(v=>v.endsWith("Cut Tape (CT)"))){value=values.find(v=>v.endsWith("Cut Tape (CT)"));data[fieldMapping[key]||key]=value;}else if(values.length>1){data[fieldMapping[key]||key]=values[0];}else{data[fieldMapping[key]||key]=value;}}});var filteredData={};finalFields.forEach(field=>{if(data[field]){filteredData[field]=data[field];}});navigator.clipboard.writeText(JSON.stringify(filteredData,null,2));alert('Data copied to clipboard as JSON!');})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment