ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 11288|回复: 19

[原创] VBA+Selenium+谷歌浏览器

[复制链接]

TA的精华主题

TA的得分主题

发表于 2020-1-1 09:48 | 显示全部楼层 |阅读模式
本帖最后由 搁浅2008 于 2020-1-1 14:01 编辑

工作中遇到一个网站必须用谷歌浏览器,才能打开。搜索后发现EH里有大神用VBA+Selenium可以解决,原贴地址如下:http://club.excelhome.net/thread-1452021-1-1.html
一、安装
安装参照原贴,一定要按原贴提供的谷歌浏览器版本还有Selenium安装包以及chromedriver。

二、利用ID来操作浏览器
1.获取ID
用谷歌浏览器打开想要操作的浏览器,在想要操作的位置(录入框或者按钮等),右键-检查(有的需要弹出右边内容后,再次右键-检查),能看到定位到的字符串中含有ID="????" 这里的ID就是我们想要的。下边以百度为例:
untitled1.png
这里的kw就是录入框的ID我们以这个ID就可以控制录入框
untitled2.png
同样方法或者取得按钮的ID为su。

2.根据ID操作浏览器输入和输出
Sub 测试1()    '工具引用Selenium   第一种通过ID
    Dim cd As New ChromeDriver
    Dim keys As New Selenium.keys   

    cd.Start
    cd.Get "https://www.baidu.com/"
    cd.Wait 1000'暂停1秒

'方法1
    ' cd.FindElementById("kw").SendKeys("Selenium").SendKeys keys.Enter  '向ID为kw的搜索框内输入Selenium并回车

    '方法2
    'cd.FindElementById("kw").SendKeys ("Selenium") '方法2 分2部 先发送 Selenium 再发送一个回车
    'cd.FindElementById("kw").SendKeys keys.Enter

    '方法3
    cd.FindElementById("kw").SendKeys ("Selenium") '方法2 分2部 先发送 再按百度按钮
    cd.FindElementById("su").Click '点击按钮

     Debug.Print cd.FindElementById("kw").Value '输出结果 有的是text这个自己测试
    cd.Quit
End Sub
上边三种方式都可以利用ID操作输入和输出最简单,找到ID就能操作。但是很多是无法获得ID,下边就学习另外一种几乎万能的方法。

三、利用Path来操作浏览器
1.获取元素的Path
还是以百度为例:在定位到的字符串上右键获取Path
untitled3.png
获取的结果为://*[@id="kw"] 在VBA中字符串中把"改成'改完后字符串为"//*[@id='kw']"
同样方法获得按钮的Path为 //*[@id='su']

2.根据Path操作浏览器输入和输出
Sub 测试2()    ' 第二种方法 通过Path
    Dim cd As New ChromeDriver
    Dim keys As New Selenium.keys   

    cd.Start
    cd.Get "https://www.baidu.com/"
    cd.Wait 1000

    cd.FindElementByXPath(" //*[@id='kw']").SendKeys("Selenium").SendKeys keys.Enter    '其他和测试1一样 只是定位的方式不同

    Debug.Print cd.FindElementByXPath(" //*[@id='kw']").Value  '输出结果 有的是text这个自己测试
End Sub
这种利用Path方法也很简单,浏览器已经提供了Path的copy XPath。

三、实战获取胜负彩销量
1.打开网站 "http://kaijiang.500.com/sfc.shtml" 找到销量的 然后右键 检查 这时我们发现找ID就没办法了 只能利用Path
untitled4.png
取得销量的Path为:"/html/body/div[6]/div[3]/div[2]/div[1]/div[2]/table[1]/tbody/tr[4]/td/span[1]"

2.获取销量
Sub 测试3()    '实战  彩票取数
    Dim cd As New ChromeDriver
    Dim keys As New Selenium.keys  
    cd.Start
    cd.Get "http://kaijiang.500.com/sfc.shtml"
    '/html/body/div[6]/div[3]/div[2]/div[1]/div[2]/table[1]/tbody/tr[4]/td/span[1]  
    cd.Wait 1000
    Debug.Print cd.FindElementByXPath("/html/body/div[6]/div[3]/div[2]/div[1]/div[2]/table[1]/tbody/tr[4]/td/span[1]").Text '可以通过立即窗口测试
End Sub

untitled5.png
执行Debug.Print cd.FindElementByXPath("/html/body/div[6]/div[3]/div[2]/div[1]/div[2]/table[1]/tbody/tr[4]/td/span[1]").Value的时候发现返回是空白
然后换成Text就取得了想要的结果,其他的输入输出按钮等等自己去测试就可以了。

注意:多利用立即窗口来测试能不能返回想要的结果

关于网站的验证还有上传文件都没有研究,另外上边有些名词可能使用不当,理解意思就好!!!





Selenium.zip

294.56 KB, 下载次数: 292

TA的精华主题

TA的得分主题

发表于 2020-1-1 15:10 来自手机 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
chromedriver和chrome版本要匹配上,搜索一下版本对照表就行了,你安装的chrome是什么版本,下载对应的chromedriver就可以测

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-1-1 15:27 | 显示全部楼层
我是来讨说法的 发表于 2020-1-1 15:10
chromedriver和chrome版本要匹配上,搜索一下版本对照表就行了,你安装的chrome是什么版本,下载对应的chro ...

这个谷歌浏览器不能换成最新版本 因为这个国外的大神只做了这个版本的 以后的版本都不行 我测试过。原贴这样说: 这个封装器是一个叫florentbr的老外写的开源项目,他把selenium封装成了window下的com库,这样我们就能使用vba来使用他了。不过他只更新到了2016年,所有对应的浏览器驱动不是很新。他最大的贡献就是在于把原来java、c#、python才能玩的东西给大家做成了VBA玩家也能玩的东西了。

TA的精华主题

TA的得分主题

发表于 2020-1-1 15:51 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
可惜不再更新版本
如果只是這樣倒不如用回ie 11好了
MS又不肯把edge封裝對像在vba能用

TA的精华主题

TA的得分主题

发表于 2020-1-1 18:13 | 显示全部楼层
Selenium操作各种浏览器的原理就是利用WebDriver。VB版的WebDriver没有。
分享一下:
老外的《VBS写的控制谷歌浏览器的驱动-WebDriverBeta》https://www.lanzous.com/i6wulrg
我做了一个VB版的WebDriver的框架,是个类模块,包含的功能有:打开浏览器、获得当前网页标题、获得网页源码、获得cookie
下载地址:https://www.lanzous.com/i84sowb
愿意自己打造工具的可以完善。

WebDriver的参考资料https://github.com/SeleniumHQ/se ... sionidelementidname

TA的精华主题

TA的得分主题

发表于 2020-1-1 18:14 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
这个框架亲测最新版本的浏览器都是支持的

TA的精华主题

TA的得分主题

发表于 2020-1-1 18:34 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2020-1-1 21:00 来自手机 | 显示全部楼层
谷歌上有一个浏览器插件,录制一下操作过程就可以录制成python脚本,运行就可以了。

TA的精华主题

TA的得分主题

发表于 2020-1-1 21:03 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
selenium ide

TA的精华主题

TA的得分主题

发表于 2020-1-2 08:22 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-18 19:44 , Processed in 0.041020 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表