一、问题出现的原因
网页中有一种节点叫做iframe,相当于外部页面的子页面,它的结构和外部页面的结构是一致的。当我们使用selenium去模拟浏览器进行操作时,是默认的在父级Frame里面进行操作,但是页面中还存在子Frame,这时候是获取不到子Frame里面的节点的,也就表现在虽然在页面中有数据内容,但是使用模拟浏览器获取获取不到任何内容。
二、解决方法
# 获取#document下的数据
iframe = WebDriverWait(self.browser, 20).until(
EC.presence_of_element_located(
(By.CSS_SELECTOR, 'iframe')))
# iframe = browser.find_element_by_css_selector('iframe')
self.browser.switch_to_frame(iframe)
如上面的代码所示,使用swith_to.frame()方法来切换Frame即可解决。