首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python 学习手册
Python Cookbook
Python 基础教程
Python Sites
PyPI - Python Package Index
http://www.simple-is-better.com/
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
拉勾
V2EX  ›  Python

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

  •  
  •   coolloves · 31 天前 · 1398 次点击
    这是一个创建于 31 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    20 回复  |  直到 2019-02-20 20:42:07 +08:00
        1
    linhua   31 天前   ♥ 1
        2
    coolloves   31 天前
    @linhua 我打印了 page_resource,元素能定位到,但是关键数值 myprice 没有渲染出来

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

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

    @cece0417 元素可以定位,只是数据不交互
        6
    linhua   31 天前
    使用 selenium 操作 chrome 时,chrome 中出现数据了吗?
    代码中 等待元素加载完成了吗?
    https://blog.csdn.net/leorx01/article/details/71086875
        7
    Hieast   31 天前 via Android
    一种可能是缺少 js 加载的时间,
    验证方式是用 selenium 调 chrome 窗口模式直观看到页面的变化,看看有没有数据
        8
    chenyu0x00   31 天前 via Android
    应该是异步数据加载的关系吧,你可以试试打开关键页面之后,等待几秒钟再获取 page_resource
        9
    coolloves   31 天前
    @linhua @Hieast 直接调用 chrome 是没有问题的,但是打印 page_resource 一些关键数值没有.我模拟点击报价,也点击了,但是没有事件发生.
    页面是通过 websock 通信获取数据的,应该类似股票交易那种实时交互的,
        10
    linhua   31 天前
        11
    coolloves   31 天前
    @linhua 大佬,有 python 的 demo 嘛?
        12
    theks   31 天前 via Android
    你在 5 楼的想法有道理。现在有两种可能,要么是异步加载的问题,要么是 websocket 的问题。
        13
    Raisu   31 天前 via Android
    同楼上
        14
    coolloves   31 天前
    我把最终的页面截了个图看了下,少一些关键的数值,这些数值,都是通过 websocket 交互的,查了资料,也没结果.
    我最终其实并不是为了获取数值,我是要自动化一套完整的流程,避免人工,这个实在不知道咋搞了,最后一步卡主了...
        15
    LeeSeoung   30 天前
    建议跟踪下 ws 交互后的数据如何填充到页面上的。
        16
    CodeCore   30 天前
    1. iframe
    2. 延时一会等加载完毕
    3. while 一直等加载完成
    4. 我遇到的是 SS 全局代理了, 导致无法访问......我调试了一个多小时才发现....菜的无法直视
        17
    Hieast   30 天前
    @coolloves 另外一个思路,你这个数据是需要通过交互来获取的,你能确定你模拟点击报价那个元素生效了么。
    不同的窗口页面元素有不同的排列,可能有元素挡在点击报价前面导致点击无效。
        18
    Hieast   30 天前
    @coolloves 验证的方法是你把 chrome headless 模式关掉,在最终页面打开开发者工具,
    1. 检查元素看看有没有遮挡。
    2. 直接手动点击,看数据能不能加载出来。
        19
    911speedstar   30 天前
    1.sleep 一下
    2.找到生成 muprise 的 js,js2py 执行
        20
    coolloves   30 天前
    非常感谢各位,是最开始我发现是 iframe,我就直接访问的 iframe 的 url,结果导致了,数据是原页面获取的,往 iframe 里面套.
    后来我有仔细学习了下用了 switch_to.iframe 切过去,最终搞定了,多谢以上各位朋友.
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2353 人在线   最高记录 4385   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 18ms · UTC 06:44 · PVG 14:44 · LAX 23:44 · JFK 02:44
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1