• 使用selenium控制(接管)已打开的浏览器(chrome),并通过WebDriver值检测


    在使用selenium进行自动化测试中我们有时会遇到这样的情况:

           我们需要手动打开浏览器,进入到所需的页面,执行一些手动任务,如输入表单、输入验证码,登陆成功后,然后再开始运行自动化脚本。

    这种情况下如何使用selenium来接管先前已打开的浏览器呢?

    这里给出Google Chrome浏览器的解决方案。

    我们可以利用Chrome DevTools协议。它允许客户检查和调试Chrome浏览器。

    打开cmd,在命令行中输入命令:

    chrome.exe --remote-debugging-port=9222 --user-data-dir="C:selenumAutomationProfile"

       对于-remote-debugging-port值,可以指定任何打开的端口。

          对于-user-data-dir标记,指定创建新Chrome配置文件的目录。它是为了确保在单独的配置文件中启动chrome,不会污染你的默认配置文件。

          还有,不要忘了在环境变量中PATH里将chrome的路径添加进去。

    此时会打开一个浏览器页面,我们输入百度网址,我们把它当成一个已存在的浏览器。

    现在,我们需要接管上面的浏览器。新建一个python文件,运行以下代码:

    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options 
    chrome_options = Options()
    chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")
    chrome_driver = "chromedriver.exe" 
    driver = webdriver.Chrome(chrome_driver, chrome_options=chrome_options)
    print(driver.title)
    driver.get("https://intoli.com/blog/not-possible-to-block-chrome-headless/chrome-headless-test.html")

    会发现打印出了 “百度一下,你就知道” 的网页标题。这样我们就实现了对一个已打开的浏览器的控制。

    更多需求可以自己在此基础上进行修改。

    转自http://www.teachmeselenium.com/2018/08/11/how-to-connect-selenium-to-an-existing-browser-that-was-opened-manually/

    翻译http://www.cnblogs.com/lovealways

     补充:由于测试上面代码时,我还没安装chromedriver,于是用以下代码安装:

    pip install chromedriver

    又从这里找到http://chromedriver.storage.googleapis.com/index.html chromedriver.exe(win32版本的) 放在当前脚本目录中(后来发现其实也不用下载,可以用之前C#代码测试时的chromedriver.exe)

    然而,上面的代码证明,没能通过WebDriver反爬检测。

    最终参考https://www.cnblogs.com/bgmc/p/12154484.html  bgmc的文章,将代码改成:

    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options 
    chrome_options = Options()
    chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")
    chrome_driver = "chromedriver.exe" 
    driver = webdriver.Chrome(chrome_driver, chrome_options=chrome_options)
    script = '''
    Object.defineProperty(navigator, 'webdriver', {
        get: () => undefined
    })
    '''
    driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {"source": script})
    print(driver.title)
    driver.get("https://intoli.com/blog/not-possible-to-block-chrome-headless/chrome-headless-test.html")

    哈哈,通过检测!

    参考:https://www.cnblogs.com/lovealways/p/9813059.html

    https://www.cnblogs.com/bgmc/p/12154484.html

  • 相关阅读:
    domain logic approaches
    远程连接mysql提示:1251-client does not support authentication protocol requested by server
    Navicat远程连接mysql时,报错误“Can't connect to MySQL server on 'ip'(10038)”的解决方法
    XShell连接不了(ubunt14.04)虚拟机Could not connect to ‘192.168.1.105’ (port 22): Connection failed
    Ubuntu20.04 安装和卸载MySQL8
    linux系统(Ubuntu)之合上笔记本盖但不断网
    Ubuntu20.04 FTP服务器的搭建
    Ubuntu20.04安装SqlServer2019教程-简洁版
    Linux更改主机名的三种方法
    ubuntu grub引导win10
  • 原文地址:https://www.cnblogs.com/pu369/p/12407996.html
Copyright © 2020-2023  润新知