Selenium webdriver.Remote 驱动程序不能与 tor 代理一起使用(webdriver.Chrome 可以)

2023-12-11

我正在尝试在我的设备上使用socks5代理远程驱动程序作为 docker 容器托管在端口 4444 上.

这是代码示例:

from selenium import webdriver

opts = webdriver.ChromeOptions()
opts.add_argument("--no-sandbox")
opts.add_argument("--disable-dev-shm-usage")
opts.add_argument("--proxy-server=socks5://127.0.0.1:9050")
driver = webdriver.Remote(command_executor="http://localhost:4444/wd/hub", desired_capabilities=opts.to_capabilities())

然后,当我尝试打开任何页面时,我收到错误消息Check your proxy settings or contact your network administrator.

在常规代理上使用相同的代码示例时,它工作得很好。 当我通过大胆的请求9050端口 – 工作得很好。

最后,当我使用相同的代码示例时webdriver.Chrome代替webdriver.Remote效果很好!

如果有任何建议让我通过远程网络驱动程序正常工作,我将不胜感激。

UPDATE:我在用着selenium==3.14.0RemoteDriver 正在获取 docker 镜像selenium/node-chrome-debug:3.141.59-radium.


对于 macOS 和 Windows,您可以使用host.docker.internal从容器访问本地主机:

from selenium import webdriver

opts = webdriver.ChromeOptions()
opts.add_argument("--no-sandbox")
opts.add_argument("--disable-dev-shm-usage")
opts.add_argument("--proxy-server=socks5://host.docker.internal:9050")
driver = webdriver.Remote(command_executor="http://127.0.0.1:4444/wd/hub", desired_capabilities=opts.to_capabilities())

driver.get("http://jsonip.com/")
print(driver.find_element_by_css_selector("html").text)
driver.quit()

这是如何硒中心托尔代理。您可以在 docker 中创建一个网络,将容器附加到其上,然后使用容器名称作为代理主机:

docker network create mynetwork
docker run -it -p 8118:8118 -p 9050:9050 --name tor-proxy -d dperson/torproxy
docker run -d -p 4444:4444 --name selenium-hub -v /dev/shm:/dev/shm selenium/standalone-chrome:3.141.59-yttrium
docker network connect mynetwork hub
docker network connect mynetwork tor-proxy

这是相同的示例,但使用 docker-compose:

version: '3.5'

services:

  tor-proxy:
    image: dperson/torproxy
    container_name: tor-proxy
    ports:
      - "8118:8118"
      - "9050:9050"
    networks:
      - mynetwork
  
  selenium-hub:
    image: selenium/standalone-chrome:3.141.59-yttrium
    container_name: selenium-hub
    ports:
      - "4444:4444"
    networks:
      - mynetwork

networks:
  mynetwork:
    name: mynetwork
    driver: bridge

Python代码:

from selenium import webdriver

opts = webdriver.ChromeOptions()
opts.add_argument("--no-sandbox")
opts.add_argument("--disable-dev-shm-usage")
opts.add_argument("--proxy-server=socks5://tor-proxy:9050")
driver = webdriver.Remote(command_executor="http://127.0.0.1:4444/wd/hub", desired_capabilities=opts.to_capabilities())

driver.get("http://jsonip.com/")
print(driver.find_element_by_css_selector("html").text)
driver.quit()

Result:

{"ip":"18.27.197.252","about":"https://jsonip.com/about","亲!":"http://getjsonip.com","获取 通知": "https://jsonip.com/notify"}

进程已完成,退出代码为 0

使用更改后的 IP 再次运行:

{"ip":"178.165.72.177","about":"https://jsonip.com/about","亲!":"http://getjsonip.com","获取 通知": "https://jsonip.com/notify"}

进程已完成,退出代码为 0

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Selenium webdriver.Remote 驱动程序不能与 tor 代理一起使用(webdriver.Chrome 可以) 的相关文章