V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
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
sparkssssssss
V2EX  ›  Python

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

  •  
  •   sparkssssssss · Feb 20, 2019 · 4321 views
    This topic created in 2628 days ago, the information mentioned may be changed or developed.

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

    20 replies    2019-02-20 20:42:07 +08:00
    linhua
        1
    linhua  
       Feb 20, 2019   ❤️ 1
    sparkssssssss
        2
    sparkssssssss  
    OP
       Feb 20, 2019
    @linhua 我打印了 page_resource,元素能定位到,但是关键数值 myprice 没有渲染出来

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

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

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