Selenium如何连接已经打开的浏览器

发表于:2023-2-13 09:50

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:Qwertyuiop2016    来源:CSDN

  前言
  当我们在使用selenium做一些不可描述的事时,因为我们代码的失误导致Python程序报错终止了。如果这个时候去重新运行Python程序,那么你前面已经测试的也要重新来过,所以我们需要使用已经创建的浏览器。这样就可以接着上一步的操作。
  那么,如何使用上一个已经存在的浏览器呢?我找到了两种解决方案。
  第一种
  selenium虽然没有提供连接它自己创建的浏览器实例,但是却可以连接通过–remote-debugging-port=12306这个参数启动的chrome浏览器。什么意思呢?我们先使用命令行启动一个chrome,命令如下:
  chrome所在路劲\chrome.exe --remote-debugging-port=12306
  chrome所在路劲一般是C:\Users\Administrator\AppData\Local\Google\Chrome\Application\
  Python使用刚才启动的浏览器,代码如下:
  from selenium import webdriver
  from selenium.webdriver.chrome.options import Options
  options = Options()
  options.add_experimental_option("debuggerAddress", "127.0.0.1:12306")
  driver = webdriver.Chrome(options=options)
  这样就能达到重复使用一个浏览器的效果了,不过我总感觉这个用于测试效果还行。因为浏览器一旦启动,你的Python代码所加的参数不会再生效了,就比如–proxy-server等,当然你也可以一开始就在启动chrome的时候加上,效果是一样的。这个解决方法可以解决大部分问题。另外,这个是真实启动的浏览器,并不会有selenium的一些特征值,比如window.navigator.webdriver都是undefined,这对于爬虫而言又提供了一种便利。
  第二种
  参照博客:https://www.cnblogs.com/jhao/p/8267929.html
  博客的大概意思是,selenium驱动浏览器需要有一个通信的url和一个sessionID,我们只要拿到这两个值就可以重新连接由selenium启动的浏览器。而这两个值都是driver的属性可以直接获取。代码如下:
  from selenium import webdriver
  driver = webdriver.Chrome()
  executor_url = driver.command_executor._url 
  session_id = driver.session_id
  driver.get("https://www.baidu.com/")
  print(session_id)
  print(executor_url)
  driver2 = webdriver.Remote(command_executor=executor_url, desired_capabilities={})
  driver2.session_id = session_id
  print(driver2.current_url)
  driver2.get('https://www.google.com')
  代码中第一个driver启动了一个浏览器并访问了百度,然后我们使用了第二个driver也可以去操作它。但是这个代码有个小小的问题,第二个driver连接的时候顺带又启动了一个窗口。因为我们给他重新赋值了一个session_id,所以顺带的那个窗口会变得无法操作,怎么办呢?关闭它不就行了。在driver.session_id = session_id这个代码前加一句driver.close()就行了。
  不过博客的大佬可能觉得这样操作有点low,他想的是我让它不创建新浏览器窗口不就行了,怎么办呢?找到相应的源码,重写一下(大佬到底还是大佬)。不过大佬已经给出完整代码,我们只需要复制下来用就行了。
  既然只要通信的url和sessionID就能连接,那我能不能在使用selenium时指定这两个的值呢?可以看出通信url就是个本地地址加一个端口,我看了一下webdriver的代码发现driver.Chrome()这个类有个port的参数,试了一下发现这个参数就是通信url的端口。既然端口可以指定,那sessionID呢?也许能,但我不会,没有相应的参数可以指定,也看不懂源码是在哪里生成的。
  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号