4
  • 平台:

    • 计算机 A(网格集线器):Ubuntu 14.04
    • 计算机 B(网格节点):Ubuntu 16.04
  • python + Selenium Grid + 无头 Chrome

我做了什么

我正在使用 Selenium Grid - 在计算机 A 中设置了一个集线器,在计算机 B 中设置了一个节点。我可以通过以下 python 代码打开计算机 B 的无头 Chrome:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time

def open_remote_headless_chrome():
    # parameters
    head_port = 9222

    # config options
    options = webdriver.ChromeOptions()
    options.binary_location = '/usr/bin/google-chrome-stable'
    options.add_argument('--headless')
    options.add_argument('--disable-gpu')
    # options.add_argument('--remote-debugging-port=' + str(head_port))
    # -> If I uncomment the line above, it will cause error

    # open remote headless Chrome
    driver = webdriver.Remote(
        desired_capabilities=options.to_capabilities()
    )

    # bing 'headless'
    driver.get("http://www.sogou.com")
    elem_search_input = driver.find_element_by_xpath("//input[@id='query']")
    elem_search_input.send_keys("headless")
    elem_search_input.send_keys(Keys.ENTER)

    # To Ensure that I've successfully opened the headless Chrome
    time.sleep(1)  # wait till search result page loaded
    print(driver.title)  # was the right title - "headless - 搜狗搜索"

    driver.quit()

但是当我添加--remote-debugging-port=9222到时options,终端中运行的进程最终会冻结并抛出错误。

(我将在今天晚些时候在这里发布终端信息......)

我发现了什么

netstat -a | grep localhost | grep ESTABLISHED在计算机 B 上列出了以下信息:

tcp        0      0 localhost:36976         localhost:socks         ESTABLISHED
tcp        0      0 localhost:46056         localhost:12970         ESTABLISHED
tcp        0      0 localhost:55144         123.126.51.32:https     ESTABLISHED
tcp        0      0 localhost:55918         localhost:24800         ESTABLISHED
tcp        0      0 localhost:36978         localhost:socks         ESTABLISHED
tcp        0      0 localhost:35700         localhost:socks         ESTABLISHED
tcp        0      0 localhost:12970         localhost:46056         ESTABLISHED
tcp        0      0 localhost:46068         localhost:12970         ESTABLISHED
tcp        0      0 localhost:12970         localhost:45556         ESTABLISHED
tcp        0      0 localhost:45554         localhost:12970         ESTABLISHED
tcp        0      0 localhost:45556         localhost:12970         ESTABLISHED
tcp        0      0 localhost:12970         localhost:46068         ESTABLISHED
tcp        0      0 localhost:36974         localhost:socks         ESTABLISHED
tcp        0      0 localhost:12970         localhost:45554         ESTABLISHED
tcp        0      0 localhost:34520         localhost:19080         ESTABLISHED
tcp6       0      0 localhost:50004         localhost:4444          ESTABLISHED
tcp6       0      0 localhost:59614         122.97.254.22:http      ESTABLISHED
tcp6       0      0 localhost:5555          localhost:43993         ESTABLISHED
tcp6       0      0 localhost:19080         localhost:34520         ESTABLISHED
udp  

我的尝试证明计算机 B 上的相关端口总是以 开头12,例如 12500、12341、12970...

当我localhost:12970在计算机B上访问时,我以为我找到了我一直在寻找的调试页面,但实际上它与正常的不同:

<!-- body of site localhost:12970 -->
<div id="caption">Inspectable WebContents</div>
<div id="items">
    <p>
        <div title="The tab already has active debugging session">
            <div>headless - 搜狗搜索</div>
        </div>
    </p>
</div>

而一个“正常”的就像:

<!-- start normally in command line by `chrome --headless --disable-gpu --remote-debugging-port=9222 http://www.sogou.com/` -->
<div id="caption">Inspectable WebContents</div>
<div id="items">
    <p>
        <a href="https://chrome-devtools-frontend.appspot.com/serve_file/@3cf8514bb1239453fd15ff1f7efee389ac9df8ba/inspector.html?ws=localhost:9222/devtools/page/289a78c9-d480-4c90-9469-c69e2d8133a4&remoteFrontend=true" title="搜狗搜索引擎 - 上网从搜狗开始&quot;>
            <div>搜狗搜索引擎 - 上网从搜狗开始&lt;/div>
        </a>
        <!-- Note that the div tag wrapped in an anchor! -->
    </p>
</div>

我想要的是

我可以在选项中添加调试端口吗?如果可以的话,我是否能够打开一个Remote()FireFox(因为仍然无法在 Chrome 中打开调试链接)来远程访问调试页面(在我的情况下,其 url 是localhost:9222),这是用于调试无头 Chrome。

谢谢

有任何想法吗?谢谢!

4

0 回答 0