Java Selenium 爬取微信公众号文章图片.md
项目地址结尾
一、前期准备
1. 下载selenium的驱动
Chrome
http://chromedriver.storage.googleapis.com/index.html
Firefox
https://github.com/mozilla/geckodriver/releases/
IE
http://selenium-release.storage.googleapis.com/index.html
下载好驱动然后放到、对应的浏览器的启动目录
2. 创建一个Maven项目
并在pom.xml中导入
<dependencies> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>3.141.59</version> </dependency> <dependency> <groupId>org.jsoup</groupId> <artifactId>jsoup</artifactId> <version>1.11.3</version> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter</artifactId> <version>RELEASE</version> <scope>compile</scope> </dependency> </dependencies>
二、先梳理一下思路。
爬这个页面的所有链接文章里面的图片。
1.先爬取所有的链接 存为一个 links [List]
2.再爬取所有links里面的picLinks [List<List >]
3.根据所有的链接下载图片
三、排坑
1.先说为啥我没用request库。
推荐一个结合charles、或者chrome,的curl转代码的工具
https://curl.trillworks.com/
2.文章列表业进度条是动态加载的
可以通过selenium模拟js向下滚动,滚动个三四下,就好了。注意要停个一点时间。
JavascriptExecutor driver_js = (JavascriptExecutor) webDriver; driver_js.executeScript("window.scrollTo(0, document.body.scrollHeight)");
for(int i=0;i<3;i++) { driver_js.executeScript("window.scrollTo(0, document.body.scrollHeight)"); try { Thread.sleep(3000); // 等0.3秒 } catch (InterruptedException e) { e.printStackTrace(); } }
3. 用无头浏览器进行操作 [就是不让浏览器显示出来]
// 我这里也设置了一下环境变量 避免找不到
public static WebDriver getChromeDriver(){ if (webDriver == null) { System.setProperty("webdriver.chrome.driver", "C:\Users\lenovo\AppData\Local\Google\Chrome\Application\chromedriver.exe"); // FirefoxDriver() 火狐浏览器 //谷歌浏览器 ChromeOptions chromeOptions = new ChromeOptions(); chromeOptions.addArguments("-headless"); webDriver = new ChromeDriver(chromeOptions); } return webDriver; }
项目地址:
https://github.com/Bit-urd/crawls-java
我的项目结构 [其实单纯的实现功能没这么麻烦],毕竟想着Java做就工程化一下,方便以后的复用。现在有些类还没有完善,以后用到功能再完善。
入口类:WevhatImageParse.java