代码之家  ›  专栏  ›  技术社区  ›  Panagiotis Simakis Maksym Potapchuk

启动启用扩展的Selenium Chromedriver

  •  2
  • Panagiotis Simakis Maksym Potapchuk  · 技术社区  · 6 年前

    我试着用 this 插件。我下载的插件是 .crx 我用这个扩展名初始化了浏览器:

    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    chrome_options = Options()
    chrome_options.add_extension('/path/to/extension.crx')
    driver = webdriver.Chrome(chrome_options=chrome_options, executable_path='/path/to/chromedriver')
    

    扩展已在浏览器中正确加载,但未启用。

    not enabled extension screenshot

    要启用扩展,必须单击位于dom外部的扩展图标。

    enabled extension

    有什么办法可以执行这种行动吗?

    3 回复  |  直到 6 年前
        1
  •  1
  •   Shivam Mishra    6 年前

    这不能通过硒来实现。一个快速的方法是使用 win32 api 要模拟点击屏幕上的扩展按钮的坐标。

    首先在屏幕上找到扩展按钮的坐标。你可以使用类似的工具 this . 我自己通过比较按钮正下方的DOM坐标找到了一个大致的位置。 this 镀铬加长件。

    然后,使用以下代码模拟单击该位置:

    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    import win32api, win32con
    
    chrome_options = Options()
    chrome_options.add_extension('//path to crx')
    driver = webdriver.Chrome(chrome_options=chrome_options, executable_path='path to chromedriver')
    driver.maximize_window()
    click(1317,51) # the coordinates of the button on my 1366 x 768 screen after maximizing. 
    
    def click(x,y):
        win32api.SetCursorPos((x,y))
        win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,x,y,0,0)
        win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,x,y,0,0)
    

    此外,您还可以退房 Sikuli . 它使用图像识别来识别和执行屏幕上任何所需元素的操作。您首先必须截取按钮的屏幕截图,然后在Sikuli脚本中对其执行单击功能。之后,您可以按照下面的建议从python触发sikuli脚本 here .

        2
  •  1
  •   Nic Endo    6 年前

    要启用扩展,必须单击位于dom外部的扩展图标。

    这就是问题所在。Selenium和WebDriver工作 只有 在DOM上。

    典型的解决方案是 use Sikuli with Selenium . 它是一个强大的工具,可以自动化和测试用户界面截图。Sikuli脚本的核心是用Java编写的,这意味着可以在程序中使用Sikuli脚本作为标准的Java库。

    如果您在Windows上,则要使用较新的解决方案 SeeShell 达到同样的效果。SeeShell类似于Sikuli,但针对Windows自动化进行了优化,并提供 relative matching 我发现它对于可靠地查找小图像很有用,比如扩展图标。

        3
  •  0
  •   Manindra Gautam    6 年前

    在Ubuntu(Linux)上没有任何东西对我有用。所以我已经处理好了


    所需包装的安装:
    -> sudo apt install libx11-dev
    Note: install above "libx" package according to your distro
    
    -> pip install selenium PyUserInput
    

    注意:在安装pyuserinput之后,应该在python路径中有pymouse和pykeyboard模块。

    import os
    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    from pymouse import PyMouse
    
    m = PyMouse()
    executable_path = "/home/username/python/chromedriver"
    # Note: replace your chromedriver path with above
    
    os.environ["webdriver.chrome.driver"] = executable_path
    chrome_options = Options()
    chrome_options.add_extension('path_of_extension.crx')
    
    driver = webdriver.Chrome(executable_path=executable_path, chrome_options=chrome_options)
    driver.maximize_window()
    
    m.click(1317,51)
    

    谢谢