最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

【已解决】Selenium调试时能搜到元素但是直接运行找不到

元素 crifan 1646浏览 0评论
折腾:
【未解决】Selenium中Python解析百度搜索结果第一页获取标题列表
期间,对于代码:
searchResultAList = chromeDriver.find_elements_by_xpath("//h3[contains(@class, 't')]/a")
之前可以找到元素。
再次调试,直接运行到此行代码,发现:
searchResultAList = chromeDriver.find_elements_by_xpath("//h3[contains(@class, 't')]/a")
找不到,返回空了:
很是奇怪,重新调试找原因
估计是:前面搜索后,页面还没内容呢,就立刻调用代码了?
那看看如何加 延迟?或者找到更好的机制,确保可以找到
心得和总结 · Selenium知识总结
估计要加 wait的机制
比如类似于:
WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.XPATH, '//div[@class="phholder"]/div[@class="placeholder"]')))
5. 等待页面加载完成(Waits) — Selenium-Python中文文档 2 documentation
    element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, "myDynamicElement"))
    )
去试试:
比如等待2秒,直到什么元素出现
此处,如果加载完毕,则找个确定会出现的元素
然后去找百度搜索后,确保会出现的内容:
【整理】用Chrome或Chromium查看百度首页中各元素的html源码
其中是:
<span class="nums_text">百度为您找到相关结果约2,370,000个</span>
试试:
# wait search complete -> follow element makesure show = visible
MaxWaitSeconds = 10
numTextElem = WebDriverWait(chromeDriver, MaxWaitSeconds).until(
    EC.presence_of_element_located((By.XPATH, "//span[@class='nums_text']"))
)
print("Search complete, showing: %s" % numTextElem)
结果:
生效了,可以找到结果了,确保是此处点击搜索按钮后,页面加载完毕了。
【总结】
当(百度首页触发搜索导致)页面内容变化后,往往直接后续运行代码,会找不到元素。
解决办法:
去加上对应的等待机制。
逻辑是:找到页面变化后的,一定会有元素。然后去wait直到该元素出现。
此处是:
百度为您找到相关结果约xxx个
对应着元素:
<span class="nums_text">百度为您找到相关结果约2,370,000个</span>
然后代码中用:
# wait search complete -> follow element makesure show = visible
MaxWaitSeconds = 10
numTextElem = WebDriverWait(chromeDriver, MaxWaitSeconds).until(
    EC.presence_of_element_located((By.XPATH, "//span[@class='nums_text']"))
)
print("Search complete, showing: %s" % numTextElem)
(最多)等待10秒,直到该元素出现。
然后才继续后续代码,即可正常运行,找到要的值了。

转载请注明:在路上 » 【已解决】Selenium调试时能搜到元素但是直接运行找不到

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
80 queries in 0.183 seconds, using 22.09MB memory