MyChromeDriver.java 3.6 KB
package com.canrd.webmagic.processor.driver;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.springframework.stereotype.Component;

import java.util.Arrays;

/**
 * @author zhongnanhuang
 * @version 1.0
 * @project webmagic-canrd-service
 * @description 谷歌浏览器驱动
 * @date 2024/5/23 10:49:30
 * 驱动下载地址:https://storage.googleapis.com/chrome-for-testing-public
 */
@Component
public class MyChromeDriver implements BrowserDriver{
    private static final String WIN_DRIVER_PATH = "D:\\driver\\chrome\\chromedriver-win64\\chromedriver.exe";
    private static final String LINUX_DRIVER_PATH = "/home/canrd/webmagic/chrome/chromedriver-linux64/chromedriver";
    private static final String WIN_BINARY_PATH = "D:\\driver\\chrome\\chrome-headless-shell-win64\\chrome-headless-shell.exe";
    private static final String LINUX_BINARY_PATH = "/home/canrd/webmagic/chrome/chrome-linux64/chrome";

    @Override
    public WebDriver getDriver() {
        // 初始化ChromeOptions
        ChromeOptions options = new ChromeOptions();
        // 添加代理,这里使用的代理是示例,需要替换为实际的代理服务器地址和端口
//        options.addArguments("--proxy-server=http://proxy-server:port");

        // 禁用JavaScript,有时这能帮助绕过Cloudflare的检查
        options.addArguments("--disable-javascript");

        // 禁用浏览器扩展,如果知道Cloudflare使用了特定的扩展,可以禁用它
        options.addArguments("--disable-extensions");

        // 禁用本地缓存,确保每次访问都从服务器获取
        options.addArguments("--disable-application-cache");

        // 禁止策略化
        options.addArguments("--disable-infobars");
        // 解决DevToolsActivePort文件不存在的报错
        options.addArguments("--no-sandbox");
        // 指定浏览器分辨
        options.addArguments("window-size=1920x3000");
        // 谷歌文档提到需要加上这个属性来规避bug
        options.addArguments("--disable-gpu");
        // 隐身模式(无痕模式)
        options.addArguments("--incognito");
        // 最大化运行(全屏窗口),不设置,取元素会报错
        options.addArguments("--start-maximized");
        // 禁用浏览器正在被自动化程序控制的提示
        options.addArguments("--disable-infobars");
        // 隐藏滚动条, 应对一些特殊页面
        options.addArguments("--hide-scrollbars");
        // 不加载图片, 提升速度
        options.addArguments("blink-settings=imagesEnabled=false");
        // 浏览器不提供可视化页面. linux下如果系统不支持可视化不加这条会启动失败
        options.addArguments("--headless");
        //禁用 blink 特征
        options.addArguments("disable-blink-features=AutomationControlled");
        options.setExperimentalOption("excludeSwitches", Arrays.asList("enable-automation"));
        options.setExperimentalOption("useAutomationExtension", false);
        options.addArguments("--remote-allow-origins=*");


        String os_name = System.getProperty("os.name");
        // 判断是否是windows系统
        if (os_name.toLowerCase().startsWith("win")) {
            // windows
            options.setBinary(WIN_BINARY_PATH);
            System.setProperty("webdriver.chrome.driver", WIN_DRIVER_PATH);
        } else {
            // linux
            options.setBinary(LINUX_BINARY_PATH);
            System.setProperty("webdriver.chrome.driver", LINUX_DRIVER_PATH);
        }

        return new org.openqa.selenium.chrome.ChromeDriver(options);
    }
}