V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
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
ky1e
V2EX  ›  Python

发现 selenium 无法定位 Vue.js 动态生成得页面元素请问有什么解决方案吗?

  •  
  •   ky1e ·
    kelven1217 · 2023-04-10 23:01:32 +08:00 · 2451 次点击
    这是一个创建于 577 天前的主题,其中的信息可能已经有所发展或是发生改变。

    发现 selenium 无法定位 Vue.js 动态生成得页面元素,求教有什么解决方案吗? 连这种最简单得元素都无法获取: browser.find_element(By.XPATH, '//div[@class="phoneNumLogin"]')

    10 条回复    2023-04-23 23:40:17 +08:00
    ClericPy
        1
    ClericPy  
       2023-04-10 23:33:38 +08:00
    试试 JS 能定位么, 有时候因为内嵌 iframe 了得在内层 node 上运行 JS? 瞎猜的~ 早就不用 selenium 了
    renmu
        2
    renmu  
       2023-04-10 23:58:21 +08:00 via Android
    我记得 selenium 就是个无头浏览器,你加载完页面后 sleep 一段时间,等 js 加载完再处理,我记得有个什么 wait 的参数
    MHPSY
        3
    MHPSY  
       2023-04-11 08:28:46 +08:00
    先去试一下正常的浏览器能不能用 document byId 获取到 (我怀疑是拼写错误)
    kanchi240
        4
    kanchi240  
       2023-04-11 08:49:59 +08:00
    报什么错呢,F12 把 xpath 贴进去看能找到吗
    lyhapple
        5
    lyhapple  
       2023-04-11 09:00:24 +08:00
    动态生成的内容需要等待内容生成出来, 在 DOM 树里有对象才行,这样做:
    lyhapple
        6
    lyhapple  
       2023-04-11 09:03:37 +08:00   ❤️ 1
    手快了,按错了,这样做:
    from selenium.webdriver.support.ui import WebDriverWait
    WAIT_SEC = 60 // 秒
    wait = WebDriverWait(browser, WAIT_SEC)
    locator = (By.CSS_SELECTOR, "div.phoneNumLogin")
    if wait.until(EC.visibility_of_element_located(locator)):
    div = browser.find_element(*locator)
    // 继续你的逻辑


    重点在于 WebDriverWait
    lyhapple
        7
    lyhapple  
       2023-04-11 09:04:05 +08:00
    晕, 缩进被自动干掉了。。
    evil0harry
        8
    evil0harry  
       2023-04-11 10:19:15 +08:00
    @lyhapple 编辑器对游标卡尺语言不太友好
    yjfkk
        9
    yjfkk  
       2023-04-11 18:35:06 +08:00 via iPhone
    selenium 无法感知到动态 dom 的加载过程,selenium 以为渲染结束了,其实没结束,解决办法:
    1.暴力 sleep 几秒等控件出现
    2.wait_for 方法等待元素出现。
    pppguest3962
        10
    pppguest3962  
       2023-04-23 23:40:17 +08:00 via iPhone
    那么多年了,selenium 会不会出现有新时代的替代品了?
    以前写过几个爬虫,想省事就绕不开这个了,这个东西在我代码逻辑上,尤其在多线程的时候,一些环节上的实现,页面会莫名其妙的要等很久(内存和核数也分配的足够),最烦要 wait ,wait 可靠性也不高,渲染效率也不怎么样,还真不如花更多的时间去琢磨 js 引用数据算法,逆向它的实现原理,直接取数据而不等渲染出具体的 DOM 节点目标…
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2776 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 13:44 · PVG 21:44 · LAX 05:44 · JFK 08:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.