selenium 打开网页后,仍然无法获取到关键数值,请教!

2019-02-20 09:26:11 +08:00
 coolloves

一个.net 的项目,模拟登陆,一路模拟点击到最后关键的页面,此页面是一个竞价拍卖的竞拍页面,显示当前的价格等关键数值,但是我打印了 page_resource,却看不到这些关键数值,所以导致无法获取到,这个.net 是个外包项目,之中的难处就不说了,提供支持的人都太水了,无法和他们沟通这些,我只知道这个页面最后是通过 signalR 和服务器保持通信的,不知道是否和此有关呢? 抱歉,因为是公司业务内部页面,我无法提供 url

3630 次点击
所在节点    Python
20 条回复
linhua
2019-02-20 09:30:58 +08:00
coolloves
2019-02-20 09:43:08 +08:00
@linhua 我打印了 page_resource,元素能定位到,但是关键数值 myprice 没有渲染出来

<div class="mypricetitle">我的报价(<label class="CurrencyUnit">元</label>)</div>
<div class="myprice"></div>
butterfly1211
2019-02-20 09:46:00 +08:00
是不是浏览器加载了一些插件,在插件中显示的,.net 最喜欢搞这种东西
cece0417
2019-02-20 09:47:38 +08:00
最后实在点不到了,可以试试用 js 点
coolloves
2019-02-20 09:54:50 +08:00
@butterfly1211 我感觉是因为 selenium 的缘故,我直接调用 chrome,全程可以看到,都是顺利获取完成的
应该是 selenium 无法支持获取 websocket 数据的缘故吧,不知道 pyppeteer 是否可以?

https://groups.google.com/forum/#!topic/selenium-users/oQfUlZPB0Ck

@cece0417 元素可以定位,只是数据不交互
linhua
2019-02-20 10:06:43 +08:00
使用 selenium 操作 chrome 时,chrome 中出现数据了吗?
代码中 等待元素加载完成了吗?
https://blog.csdn.net/leorx01/article/details/71086875
Hieast
2019-02-20 10:11:24 +08:00
一种可能是缺少 js 加载的时间,
验证方式是用 selenium 调 chrome 窗口模式直观看到页面的变化,看看有没有数据
chenyu0x00
2019-02-20 10:22:36 +08:00
应该是异步数据加载的关系吧,你可以试试打开关键页面之后,等待几秒钟再获取 page_resource
coolloves
2019-02-20 10:33:56 +08:00
@linhua @Hieast 直接调用 chrome 是没有问题的,但是打印 page_resource 一些关键数值没有.我模拟点击报价,也点击了,但是没有事件发生.
页面是通过 websock 通信获取数据的,应该类似股票交易那种实时交互的,
linhua
2019-02-20 10:54:20 +08:00
coolloves
2019-02-20 11:02:35 +08:00
@linhua 大佬,有 python 的 demo 嘛?
theks
2019-02-20 13:29:49 +08:00
你在 5 楼的想法有道理。现在有两种可能,要么是异步加载的问题,要么是 websocket 的问题。
Raisu
2019-02-20 13:32:39 +08:00
同楼上
coolloves
2019-02-20 14:14:18 +08:00
我把最终的页面截了个图看了下,少一些关键的数值,这些数值,都是通过 websocket 交互的,查了资料,也没结果.
我最终其实并不是为了获取数值,我是要自动化一套完整的流程,避免人工,这个实在不知道咋搞了,最后一步卡主了...
LeeSeoung
2019-02-20 15:29:32 +08:00
建议跟踪下 ws 交互后的数据如何填充到页面上的。
CodeCore
2019-02-20 17:52:22 +08:00
1. iframe
2. 延时一会等加载完毕
3. while 一直等加载完成
4. 我遇到的是 SS 全局代理了, 导致无法访问......我调试了一个多小时才发现....菜的无法直视
Hieast
2019-02-20 18:02:32 +08:00
@coolloves 另外一个思路,你这个数据是需要通过交互来获取的,你能确定你模拟点击报价那个元素生效了么。
不同的窗口页面元素有不同的排列,可能有元素挡在点击报价前面导致点击无效。
Hieast
2019-02-20 18:09:14 +08:00
@coolloves 验证的方法是你把 chrome headless 模式关掉,在最终页面打开开发者工具,
1. 检查元素看看有没有遮挡。
2. 直接手动点击,看数据能不能加载出来。
911speedstar
2019-02-20 19:29:27 +08:00
1.sleep 一下
2.找到生成 muprise 的 js,js2py 执行
coolloves
2019-02-20 20:42:07 +08:00
非常感谢各位,是最开始我发现是 iframe,我就直接访问的 iframe 的 url,结果导致了,数据是原页面获取的,往 iframe 里面套.
后来我有仔细学习了下用了 switch_to.iframe 切过去,最终搞定了,多谢以上各位朋友.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/536763

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX