折腾:
【未解决】Selenium中Python解析百度搜索结果第一页获取标题列表
期间,对于代码:
searchResultAList = chromeDriver.find_elements_by_xpath("//h3[contains(@class, 't')]/a")
之前可以找到元素。
再次调试,直接运行到此行代码,发现:
searchResultAList = chromeDriver.find_elements_by_xpath("//h3[contains(@class, 't')]/a")
找不到,返回空了:
很是奇怪,重新调试找原因
估计是:前面搜索后,页面还没内容呢,就立刻调用代码了?
那看看如何加 延迟?或者找到更好的机制,确保可以找到
估计要加 wait的机制
比如类似于:
WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.XPATH, '//div[@class="phholder"]/div[@class="placeholder"]')))
?
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调试时能搜到元素但是直接运行找不到