Selenium phantomjs与spynner等待网页加载完成方式总结

本文探讨了使用无头浏览器进行网页元素模拟操作时常见的“元素不存在”错误的原因及解决办法,包括网页未加载完成、元素不可见及位于iframe内等情况,并介绍了time.sleep(), implicitly_wait()及WebDriverWait等等待策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

利用无头浏览器对网页元素进行模拟操作时经常遇到的问题就是**元素不存在这样的错误。原因大概有这么几种。

  1. 网页没有加载完成,因此定位不到元素
  2. 网页元素显示样式设置为不可见,即display:none,常见的如一些悬停显示的菜单。
  3. 元素在iframe 中,常见的情况比如腾讯网站的登录框。
    一般来讲,在网页源代码中能够看到的且display属性设置为可见的元素,selenium等工具才能够正常定位,要不然就会出现元素不存在的错误。

第2种情况可以使用一些模拟行为触发不可见的元素,或者调用jsjquery修改display属性。
第3种情况selenium可以使用switch_to_frame()切换iframe

本文重点说下第一种情况,网页只有完全加载,元素才可能被定位,但是网页是否加载完成又该怎么判断、处理呢。
常见处理方法如下:

  1. time.sleep()直接等待几秒钟,等待网页加载完成,这种方法很死板,网页加载是否加载也不能预测,只能撞大运,但也是最简单的一种方法。
  2. selenium的driver.implicitly_wait(),隐式等待,全局性设置,只用设置一次就可以。
  3. selenium的WebDriverWait(driver, 100).until(lambda x: x.find_element_by_xpath('.WB_FEED')),显式等待
  4. spynner的br.wait_for_content(lambda br: 'WB_feed' in br.html),类似于selenium的显式等待
  5. spynner的各类操作,如load、click等等操作均内置了等待内容加载的参数,原来的参数如br.click('div.login-switch', wait_load=True),新版的参数形式如br.load("html_controls.html", 1, wait_callback=wait_load)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值