使用Selenium无法解析Behance动态内容,无法获取目标JPG图片求助
解决Behance动态内容爬取问题
1. 给Selenium配置反爬规避项
Behance能识别默认的ChromeDriver,得改配置模拟正常浏览器:
System.setProperty("webdriver.chrome.driver", "S:\\behance-id\\src\\main\\resources\\chromedriver.exe"); ChromeOptions options = new ChromeOptions(); // 关闭自动化检测标记 options.addArguments("--disable-blink-features=AutomationControlled"); // 设置正常的用户代理 options.addArguments("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"); // 如需后台运行,启用无头模式 options.addArguments("--headless=new"); WebDriver driver = new ChromeDriver(options); driver.get("https://www.behance.net/gallery/148589707/Hercules-and-Randy"); // 必须等待页面动态内容加载完成,比如等待目标图片元素出现 WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10)); wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("img[src$='.jpg']"))); String str = driver.getPageSource(); // 后续即可解析源码提取图片链接
2. 务必等待动态内容渲染完毕
你之前直接获取pageSource的时机过早,此时JS还未完成图片等内容的渲染,必须通过显式等待指定元素出现后,再去获取页面源码。
3. 直接调用Behance API更高效
Behance的内容都是通过API接口加载的,打开Chrome开发者工具的Network面板,筛选XHR类型请求,就能找到对应画廊的内容接口。比如类似https://www.behance.net/v2/galleries/148589707的接口,请求后返回的JSON数据中,covers或modules字段里就包含JPG图片的链接。使用OkHttp或Java自带的HttpClient直接请求该接口,比模拟浏览器更高效,也更难触发反爬机制。
注意:请遵守Behance的服务条款,不要频繁发起请求,避免IP被封禁。
4. 检查是否存在登录限制
部分画廊内容可能需要登录才能访问,若遇到这种情况,可通过Selenium模拟登录流程,或者将浏览器中的Cookie复制到请求头中(API请求方式),确保能获取到完整内容。
内容的提问来源于stack exchange,提问作者fujidaon
相关产品推荐
相关产品推荐

