【问题标题】:Python Selenium: How to use debugger_address option in chrome driver for Remote Debugging?Python Selenium:如何在 chrome 驱动程序中使用 debugger_address 选项进行远程调试?
【发布时间】:2018-12-15 07:33:35
【问题描述】:

我想将我的 selenium chrome 网络驱动程序启动到当前现有会话。

所以我尝试通过远程调试进行连接,而不是启动一个新实例。

https://sites.google.com/a/chromium.org/chromedriver/help/operation-not-supported-when-using-remote-debugging

所以我所做的是通过 cmd 在 127.0.0.1:6813 启动 chrome。

C:\Program Files (x86)\Google\Chrome\Application>chrome.exe '127.0.0.1:6813'

启动了一个新的 chrome 实例。

现在在我的代码中,我使用 chrome 选项添加了 debugger_address="127.0.0.1:6813"。

chrome_options.debugger_address="127.0.0.1:6813"

但我的 Spyder IDE 出现以下错误:

runfile('C:/Users/Gupta Niwas/Downloads/Programming/Projects/Mi/temp7.py', wdir='C:/Users/Gupta Niwas/Downloads/Programming/Projects/Mi')
Traceback (most recent call last):

  File "<ipython-input-9-77e28441ef9f>", line 1, in <module>
    runfile('C:/Users/Gupta Niwas/Downloads/Programming/Projects/Mi/temp7.py', wdir='C:/Users/Gupta Niwas/Downloads/Programming/Projects/Mi')

  File "C:\ProgramData\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 705, in runfile
    execfile(filename, namespace)

  File "C:\ProgramData\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 102, in execfile
    exec(compile(f.read(), filename, 'exec'), namespace)

  File "C:/Users/Gupta Niwas/Downloads/Programming/Projects/Mi/temp7.py", line 22, in <module>
    browser = webdriver.Chrome(chrome_options=chrome_options,executable_path=cpath)

  File "C:\ProgramData\Anaconda3\lib\site-packages\selenium\webdriver\chrome\webdriver.py", line 75, in __init__
    desired_capabilities=desired_capabilities)

  File "C:\ProgramData\Anaconda3\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 156, in __init__
    self.start_session(capabilities, browser_profile)

  File "C:\ProgramData\Anaconda3\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 245, in start_session
    response = self.execute(Command.NEW_SESSION, parameters)

  File "C:\ProgramData\Anaconda3\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 314, in execute
    self.error_handler.check_response(response)

  File "C:\ProgramData\Anaconda3\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)

WebDriverException: unknown error: cannot connect to chrome at 127.0.0.1:6813
from chrome not reachable
  (Driver info: chromedriver=2.35.528161 (5b82f2d2aae0ca24b877009200ced9065a772e73),platform=Windows NT 10.0.17134 x86_64)

完整代码:

import pyautogui
from time import sleep
from selenium import webdriver

from selenium.webdriver.common.keys import Keys

from selenium.common.exceptions import NoSuchElementException,TimeoutException
from selenium.webdriver.common.action_chains import ActionChains

from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By

fpath="C:/Users/Gupta Niwas/Downloads/Softwares/Browsers/Drivers/geckodriver-v0.21.0-win64/geckodriver.exe"
cpath="C:/Users/Gupta Niwas/Downloads/Softwares/Browsers/Drivers/chromedriver_win32/chromedriver.exe"
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("--incognito")
chrome_options.add_argument("start-maximized")
chrome_options.debugger_address="127.0.0.1:6813"

#browser = webdriver.Firefox(executable_path=fpath)
browser = webdriver.Chrome(chrome_options=chrome_options,executable_path=cpath)
#browser.execute_async_script("function(){(function(a){document.body.appendChild(a);a.setAttribute('href', 'http://google.com');a.dispatchEvent((function(e){e.initMouseEvent('click', true, true, window, 0, 0, 0, 0, 0, true, false, false, false, 0, null);return e;}(document.createEvent('MouseEvents'))))}(document.createElement('a')));}")
browser.get('https://youngeinsteins.com/')

pyautogui.hotkey('ctrl','t')

WebDriverWait(browser,100).until(EC.visibility_of_element_located((By.CSS_SELECTOR,'html.gtie9.js.flexbox.canvas.canvastext.webgl.no-touch.geolocation.postmessage.no-websqldatabase.indexeddb.hashchange.history.draganddrop.websockets.rgba.hsla.multiplebgs.backgroundsize.borderimage.borderradius.boxshadow.textshadow.opacity.cssanimations.csscolumns.cssgradients.no-cssreflections.csstransforms.csstransforms3d.csstransitions.fontface.generatedcontent.video.audio.localstorage.sessionstorage.webworkers.applicationcache.svg.inlinesvg.smil.svgclippaths.dk_fouc body.home.page-template-default.page.page-id-15 div.subscribe-popup-wrap div.subscribe-popup div.close svg.icon-cross polygon')))
cross=browser.find_element_by_css_selector('html.gtie9.js.flexbox.canvas.canvastext.webgl.no-touch.geolocation.postmessage.no-websqldatabase.indexeddb.hashchange.history.draganddrop.websockets.rgba.hsla.multiplebgs.backgroundsize.borderimage.borderradius.boxshadow.textshadow.opacity.cssanimations.csscolumns.cssgradients.no-cssreflections.csstransforms.csstransforms3d.csstransitions.fontface.generatedcontent.video.audio.localstorage.sessionstorage.webworkers.applicationcache.svg.inlinesvg.smil.svgclippaths.dk_fouc body.home.page-template-default.page.page-id-15 div.subscribe-popup-wrap div.subscribe-popup div.close svg.icon-cross polygon')
cross.click()

【问题讨论】:

    标签: python-3.x selenium automation selenium-chromedriver spyder


    【解决方案1】:

    我知道这个答案可能对您不再有用,但对于那些仍然遭受此问题困扰的人,我已经找到了解决方案。 首先,当您尝试创建 chrome 实例时,您还需要为该实例创建一个新的配置文件。 这是一个命令: 为了运行此命令,您必须将 chrome 添加到系统路径或转到安装 chrome 的目录,对于 Windows,通常是此路径:C:\Program Files (x86)\Google\Chrome\Application

    chrome.exe -remote-debugging-port=9014 --user-data-dir="<AnyDirectoryOfYourChoice>"
    

    现在你应该在这个实例中运行一个 chrome 实例,你可以打开任何你想要的东西,一旦你完成了,你可以使用下面的这个 python 代码来连接这个 chrome 实例。

    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    
    chrome_options = Options()
    chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9014")
    driver = webdriver.Chrome(options=chrome_options)
    

    成功连接后,驱动程序将获得对您的 chrome 实例的引用,您可以像我们通常在 selenium 中一样进行控制。

    【讨论】:

    • 知道如何使用特定配置文件打开 chrome 吗?还是不行?
    • 尝试编辑但队列已满 - 对 chrome.exe 的调用在远程调试端口参数中缺少破折号“-”:chrome.exe --remote-debugging-port=9014
    【解决方案2】:

    这对我有用:

    chrome_options.add_argument('--remote-debugging-port=9222')
    

    【讨论】:

      【解决方案3】:

      似乎还有一种方法可以使用 Firefox 启动远程调试服务器。

      firefox.exe --start-debugger-server 9224 -profile C:\<profilepath>
      

      但是由于add_experimental_option()-方法是唯一可用于“Chromeoptions”类的,它可能不是一个简单的直接转换为firefox。

      【讨论】:

        猜你喜欢
        • 2012-10-25
        • 2012-09-23
        • 2022-12-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-16
        • 2022-11-21
        相关资源
        最近更新 更多