Как установить свойства браузера для узлов Selenium? - PullRequest
1 голос
/ 25 апреля 2020

Я хочу манипулировать свойствами браузера узлов Selenium. Я использую изображение selenium / node- chrome docker для узлов (но, возможно, я хочу сделать это и на Firefox узлах) внутри Selenium Grid на кластере Kubernetes (Minikube).

Свойства, которыми я хочу манипулировать:

navigator.webdriver
screen.width
screen.height
navigator.deviceMemory

, но я ищу способ, который работает для большинства свойств браузера, но позже я могу найти другие свойства, которые хочу изменить. Свойства браузера не должны изменяться во время сканирования, и их не нужно устанавливать в моем коде python, я могу изменить их в конфигурации узлов, изображении docker или подделать их в другом месте.

Я написал скрипт python для считывания текущих значений этих свойств

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

driver = webdriver.Remote(
    command_executor='http://selenium-hub:4444/wd/hub',
    desired_capabilities=getattr(DesiredCapabilities, "CHROME")
)
print("navigator.webdriver: "+str(driver.execute_script("return navigator.webdriver")))
print("screen.width: "+str(driver.execute_script("return screen.width")))
print("screen.height: "+str(driver.execute_script("return screen.height")))
print("navigator.deviceMemory: "+str(driver.execute_script("return navigator.deviceMemory")))
driver.quit()

Как изменить эти свойства?

РЕДАКТИРОВАТЬ: Развертывание K8s узел выглядит так:

kind: Deployment
metadata:
  name: selenium-node-chrome
  labels:
    app: selenium-node-chrome
spec:
  replicas: 2
  selector:
    matchLabels:
      app: selenium-node-chrome
  template:
    metadata:
      labels:
        app: selenium-node-chrome
    spec:
      containers:
      - name: selenium-node-chrome
        image: selenium/node-chrome
        ports:
          - containerPort: 5555
        volumeMounts:
          - name: dshm
            mountPath: /dev/shm
          - name: config
            mountPath: /opt/selenium/config.json
            subPath: config.json
        env:
          - name: HUB_HOST
            value: "selenium-hub"
          - name: HUB_PORT
            value: "4444"
        resources:
          limits:
            memory: "1000Mi"
            cpu: ".5"
      volumes:
      - name: dshm
        emptyDir:
          medium: Memory
      - name: config
        configMap:
          name: selenium-node-chrome
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: selenium-node-chrome
data:
  config.json: |
    {
      "capabilities": [
        {
          "version": "81.0.4044.92",
          "browserName": "chrome",
          "maxInstances": 1,
          "seleniumProtocol": "WebDriver",
          "applicationName": ""
        }
      ],
      "proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy",
      "maxSession": 1,
      "host": "0.0.0.0",
      "port": 5555,
      "register": true,
      "registerCycle": 5000,
      "nodePolling": 5000,
      "unregisterIfStillDownAfter": 60000,
      "downPollingLimit": 2,
      "debug": false
    }
...