IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Selenium + C#复用已经打开的网页 -> 正文阅读

[Python知识库]Selenium + C#复用已经打开的网页


前言

近期做一个小项目,需要用Selenium做网页自动化。原型已经用Python写好,但是考虑到用户是小白中的小白,还是用C#发布成可执行文件比较合适 (Python打包的可执行文件在公司环境下会被杀毒软件拦截). 调试时比较难受,因为工作网页登录过程比较烦琐,因此迫切希望能够利用已经打开的网页


提示:以下是本篇文章正文内容,下面案例可供参考

一、Python中是轻而易举的事

在Python中复用已打开的网页很简单。
(1) 第一次打开网页时,记下command executor url 和 session id

chrome_options = Options()
prefs = {} 
prefs['profile.default_content_settings.popups']=0 
prefs['download.default_directory']= r'C:\temp'
chrome_driver = r"C:\SeleniumWebDriver\Chrome_96\chromedriver.exe"
driver = webdriver.Chrome(chrome_driver, options = chrome_options)
executor_url = driver.command_executor._url 
session_id = driver.session_id
hd_main = driver.current_window_handle

把这3个变量print出来,记下来。
(2) 后续调试时, 改用以下代码

executor_url = 'http://127.0.0.1:55747'
session_id = '31a48d06e87e44479d69651f69e4316d'
hd_main = 'CDwindow-9A560A8A939BC99CE24C3222A5702455'
# 以上3个变量值就是第一次打开时取得的
driver = webdriver.Remote(command_executor=executor_url, desired_capabilities={})
driver.session_id = session_id
driver.switch_to.window(hd_main)

用这个办法,虽然会有一个空白网页出来,但是不影响,直接关掉新出来的空白网页就可以了。

二、C#中难度大很多(还没找到好办法)

1.网上提供的方法,在Selenium 4.1.0下实测行不通

https://tarunlalwani.com/post/reusing-existing-browser-session-selenium-csharp/

主要问题是SessionID 无论什么办法都写不进去。

2.一个凑合的办法

(1)还是要取得executor url 和 SessionID
SessionID 比较简单:

var driver = new ChromeDriver(chrome_driver);
var session_id = remoteDriver.SessionId;

但是url 就比较复杂。用上面网上提供办法也行不通。不过好在Chrome WebDriver启动时会提供:
在这里插入图片描述
【注意,WebDriver会给出两个端口号, 要取的是第一个. 关于其原理,请参见如下文章:> selenium是如何启动浏览器的

还有一个办法就是在VS 调试时的变量里查看:
在这里插入图片描述
其实Session ID 也能在这里查到。
查到后记下来就行了。

(2) 在以后的调试中复用已经打开的网页。
利用打开的网页,新建的driver 类型就不能是ChromeDriver或是IWebDriver, 而必须是RemoteWebDriver (当然实例化后可以强制转为IwebDriver)

Uri remoteAddress = new Uri("http://127.0.0.1:61924");
//String sessionId = "3477a25b0f77093da10155241aab4bae";
ICapabilities capability = chrome_options.ToCapabilities();
var remoteDriver = new RemoteWebDriver( remoteAddress,  capability);

这里利用了RemoteWebDriver()实例化时可以指定remoteAddress的功能。
但是我还是没找到方法把SessionID用代码设置的方法。
有一个笨办法,同样是在VS 的变量清单中找到driver, 然后找到SessionID, 强行改掉它就可以了。
这个办法也会新开一个空窗口,关掉它就行(实际上新开了一个session)

总结

问题的关键是C#的Selenium中,excutor url 和 SessionID都是private 变量,而且SessionID是只读的,所以造成了困难。 因为对C#了解不多,所以只能先用这个笨办法凑合,希望有高手指点。
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-01-04 13:23:24  更:2022-01-04 13:25:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 3:39:02-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码