Selenium4 RemoteWebDriver使用DevTools

一、部署Selenium Hub 和 Node

这里主要采用docker方式进行部署,需要安装docker和docker-compose。下面是docker-compose.yaml 文件, 在服务器上部署安装即可。

docker-compose up -d

  docker-compose.yaml 文件

version: "3"
services:
  chrome:
    image: selenium/node-chrome:4.1.2-20220217
    shm_size: 2gb
    depends_on:
      - selenium-hub
    environment:
      - SE_EVENT_BUS_HOST=selenium-hub
      - SE_EVENT_BUS_PUBLISH_PORT=4442
      - SE_EVENT_BUS_SUBSCRIBE_PORT=4443
      - SE_NODE_MAX_INSTANCES=3
      - SE_NODE_MAX_SESSIONS=16
      - HUB_HOST=selenium-hub
      - HUB_PORT=4444
      - SE_NODE_GRID_URL=http://172.33.0.18:4444
      - SE_NODE_SESSION_TIMEOUT=300

  edge:
    image: selenium/node-edge:4.1.2-20220217
    shm_size: 2gb
    depends_on:
      - selenium-hub
    environment:
      - SE_EVENT_BUS_HOST=selenium-hub
      - SE_EVENT_BUS_PUBLISH_PORT=4442
      - SE_EVENT_BUS_SUBSCRIBE_PORT=4443
      - HUB_HOST=selenium-hub
      - HUB_PORT=4444
      - SE_NODE_MAX_INSTANCES=3
      - SE_NODE_MAX_SESSIONS=16
      - SE_NODE_GRID_URL=http://172.33.0.18:4444
      - SE_NODE_SESSION_TIMEOUT=300

  firefox:
    image: selenium/node-firefox:4.1.2-20220217
    shm_size: 2gb
    depends_on:
      - selenium-hub
    environment:
      - SE_EVENT_BUS_HOST=selenium-hub
      - SE_EVENT_BUS_PUBLISH_PORT=4442
      - SE_EVENT_BUS_SUBSCRIBE_PORT=4443
      - HUB_HOST=selenium-hub
      - HUB_PORT=4444
      - SE_NODE_MAX_INSTANCES=3
      - SE_NODE_MAX_SESSIONS=16
      - SE_NODE_GRID_URL=http://172.33.0.18:4444
      - SE_NODE_SESSION_TIMEOUT=300

  selenium-hub:
    image: selenium/hub:4.1.2-20220217
    container_name: selenium-hub
    ports:
      - "4442:4442"
      - "4443:4443"
      - "4444:4444"
    networks:
      default:
        ipv4_address: 172.33.0.18

networks:
  default:
    driver: bridge
    ipam:
      config:
       - subnet: "172.33.0.0/16"

二、查看部署情况

docker-compose logs -f --tail=all

三、web ui

  在浏览器访问下面地址, 看是否可以打开。

注: 下面地址换成自己服务器的地址

http://192.168.1.80:4444

四、新建工程

1、pom 添加如下依赖

<dependency>
   <groupId>org.seleniumhq.selenium</groupId>
   <artifactId>selenium-api</artifactId>
   <version>4.1.2</version>
</dependency>
<dependency>
   <groupId>org.seleniumhq.selenium</groupId>
   <artifactId>selenium-chrome-driver</artifactId>
   <version>4.1.2</version>
</dependency>
<dependency>
   <groupId>org.seleniumhq.selenium</groupId>
   <artifactId>selenium-remote-driver</artifactId>
   <version>4.1.2</version>
</dependency>
<dependency>
   <groupId>org.seleniumhq.selenium</groupId>
   <artifactId>selenium-java</artifactId>
   <version>4.1.2</version>
</dependency>
<dependency>
   <groupId>net.bytebuddy</groupId>
   <artifactId>byte-buddy</artifactId>
   <version>1.12.4</version>
</dependency>
<dependency>
   <groupId>io.netty</groupId>
   <artifactId>netty-handler</artifactId>
   <version>4.1.70.Final</version>
</dependency>

五、测试代码

public class MyApp {

    private static final String URL = "http://192.168.1.80:4444/wd/hub/";

    public static void main(String[] args) throws MalformedURLException, InterruptedException {

        ChromeOptions chromeOptions = new ChromeOptions();

        WebDriver driver = new RemoteWebDriver(new URL(URL), chromeOptions);

        driver = new Augmenter().augment(driver);

        DevTools devTools = ((HasDevTools) driver).getDevTools();
        devTools.createSession();

        devTools.send(Network.enable(Optional.empty(), Optional.empty(), Optional.empty()));
        devTools.addListener(Network.responseReceived(), res -> {
            System.out.println(res.getResponse().getUrl());
        });

        driver.get("https://www.baidu.com");

        /*JavascriptExecutor js = (JavascriptExecutor) driver;
        js.executeScript("window.scrollTo(0, document.body.scrollHeight)");*/

        Thread.sleep(10000);


        driver.quit();

    }
}

六、拦截network 请求,获取ResponseBody

DevTools devTools = ((HasDevTools) driver).getDevTools();
devTools.createSessionIfThereIsNotOne();
devTools.send(Network.enable(Optional.empty(), Optional.empty(), Optional.empty()));


devTools.addListener(Network.responseReceived(), res -> {
   Response response = res.getResponse();
   String url = response.getUrl();

   // 获取network 请求的responseBody
   String responseBody = devTools.send(Network.getResponseBody(res.getRequestId())).getBody();
});

driver.get("https://www.baidu.com");

driver.wait(Duration.ofSeconds(1).toMillis());

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值