今天爬取一些网站,遇到了一些比较难理解的问题,索性一直研究,幸好解决了。发现这方面的东西写的人比较少,于是就写一下,分享心得。
首先,网页的界面如下,显示毫无问题:
再看源码:
怎么看,这都是一个正常的标签获取。然而就是获取不到这个值。
maxTi = browser.find_element_by_css_selector('#window > table:nth-child(6) > tbody > tr:nth-child(2) > td:nth-child(2)').text
这个方式每次获取的都是空值。
想过是不是有 iframe 存在的情况。仔细查找代码,并没有!
也尝试过
driver.switchTo().defaultContent()
然而,都没有结果。
最后找到了一个博客:https://www.cnblogs.com/ppppying/p/7755064.html
给出了解决方法。
这个问题的本质是被隐藏了。
maxIn = browser.find_element_by_css_selector('#window > table:nth-of-type(2) > tbody > tr:nth-child(2) > td:nth-child(3)').get_attribute('innerHTML')#承诺到窗口最多次数说明
ye_or_no = browser.find_element_by_css_selector('#window > table:nth-of-type(2) > tbody > tr:nth-child(2) > td:nth-child(3)').is_displayed()#承诺到窗口最多次数说明
test_play = browser.find_element_by_css_selector('#window > table:nth-of-type(2) > tbody > tr:nth-child(2) > td:nth-child(3)').get_attribute('innerHTML')
print('是否被隐藏--------------------------------',ye_or_no)
print('显示文本内容--------------------------------',test_play)
用ss..is_displayed()查看是否被隐藏。如果返回False,就是这个值被隐藏了。
然后用ss.get_attribute('innerHTML')获得被隐藏的东西。
上述博客还给出了其他的三种解决方法:
print(ss.get_attribute("innerHTML")) # 用innerHTML 会返回元素的内部 HTML, 包含所有的HTML标签。
print(ss.get_attribute('textContent')) #用textContent 和 innerText 只会得到文本内容,而不会包含 HTML 标签。
print(ss.get_attribute('innerText')) # innerText 不是 W3C DOM 的指定内容,FireFox不支持
1,2种在selenium使用chrome的时候均能正常使用。