From c1c2a7c7bccedfff641885bc5ee15f7923f91a86 Mon Sep 17 00:00:00 2001 From: Ethan McIntyre <113143501+jorelm68@users.noreply.github.com> Date: Thu, 7 Aug 2025 18:14:47 -0400 Subject: [PATCH] Fix for DribbbleRipper (#2129) * Fix: now downloads all images from dribbble.com links * Test: allowed DribbbleRipperTests.java to run tests --- .../ripme/ripper/rippers/DribbbleRipper.java | 33 ++++++++++++++++--- .../ripper/rippers/DribbbleRipperTest.java | 1 - 2 files changed, 28 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/rarchives/ripme/ripper/rippers/DribbbleRipper.java b/src/main/java/com/rarchives/ripme/ripper/rippers/DribbbleRipper.java index c463f5a8..bf9fd31c 100644 --- a/src/main/java/com/rarchives/ripme/ripper/rippers/DribbbleRipper.java +++ b/src/main/java/com/rarchives/ripme/ripper/rippers/DribbbleRipper.java @@ -55,11 +55,34 @@ public class DribbbleRipper extends AbstractHTMLRipper { @Override public List getURLsFromPage(Document doc) { List imageURLs = new ArrayList<>(); - for (Element thumb : doc.select("a.dribbble-link > picture > source")) { - // nl skips thumbnails - if ( thumb.attr("srcset").contains("teaser")) continue; - String image = thumb.attr("srcset").replace("_1x", ""); - imageURLs.add(image); + for (Element thumbLink : doc.select("a.dribbble-link")) { + // Resolve the absolute shot page URL + String shotPage = thumbLink.absUrl("href"); + if (shotPage.isEmpty()) { + continue; + } + + // Fetch the shot page + Document shotDoc; + try { + shotDoc = Http.url(shotPage).get(); + } catch (IOException e) { + continue; + } + + // Grab the first (the full-size image) on that page + Element imageEl = shotDoc.selectFirst("div.shot-page-container img"); + if (imageEl == null) { + continue; + } + + // Always use absUrl so you get a complete URI or an empty string + String imageURL = imageEl.absUrl("src"); + if (imageURL.isEmpty()) { + continue; + } + + imageURLs.add(imageURL); } return imageURLs; } diff --git a/src/test/java/com/rarchives/ripme/tst/ripper/rippers/DribbbleRipperTest.java b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/DribbbleRipperTest.java index 4a6bf37b..81adaf62 100644 --- a/src/test/java/com/rarchives/ripme/tst/ripper/rippers/DribbbleRipperTest.java +++ b/src/test/java/com/rarchives/ripme/tst/ripper/rippers/DribbbleRipperTest.java @@ -10,7 +10,6 @@ import org.junit.jupiter.api.Test; public class DribbbleRipperTest extends RippersTest { @Test - @Disabled("test or ripper broken") public void testDribbbleRip() throws IOException, URISyntaxException { DribbbleRipper ripper = new DribbbleRipper(new URI("https://dribbble.com/typogriff").toURL()); testRipper(ripper);