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

经验分享 程序员 微信小程序 职场和发展