今天爬取一些網站,遇到了一些比較難理解的問題,索性一直研究,幸好解決了。發現這方面的東西寫的人比較少,於是就寫一下,分享心得。
首先,網頁的界面如下,顯示毫無問題:
再看源碼:
怎麼看,這都是一個正常的標籤獲取。然而就是獲取不到這個值。
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的時候均能正常使用。