Python爬蟲實現(xiàn)selenium處理iframe作用域問題
項目場景:
在使用selenium模塊進行數(shù)據(jù)爬取時,通常會遇到爬取iframe中的內(nèi)容。會因為定位的作用域問題爬取不到數(shù)據(jù)。
問題描述:
我們以菜鳥教程的運行實例為案例。
按照正常的定位
會以文本塊生成xpath為/html/body/text()。這樣的話根據(jù)xpath進行如下代碼編寫。
#!/user/bin/ # -*- coding:UTF-8 -*- # Author:Master from selenium import webdriver import time driver = webdriver.Chrome(executable_path="./chromedriver") driver.get('https://www.runoob.com/try/runcode.php?filename=HelloWorld&type=python3') time.sleep(2) text = driver.find_element_by_xpath('/html/body').text print(text) time.sleep(5) driver.quit()
執(zhí)行結(jié)果:
很明顯這并不是想要的結(jié)果。
原因分析:
當(dāng)我們打開抓包工具定位到Hello, World!文本的時候會發(fā)現(xiàn),該文本是在一個iframe中。這樣的話我們xpath所定位到的內(nèi)容則是大的html中的路徑。我們需要的內(nèi)容則是在iframe中的小的html中。
解決方案:
通過分析發(fā)現(xiàn),想要解決問題的實質(zhì)就是改變作用域。通過switch_to.frame(‘id')方法來改變作用域就可以了。
重新編寫代碼:
#!/user/bin/ # -*- coding:UTF-8 -*- # Author:Master from selenium import webdriver import time driver = webdriver.Chrome(executable_path="./chromedriver") driver.get('https://www.runoob.com/try/runcode.php?filename=HelloWorld&type=python3') time.sleep(2) driver.switch_to.frame('iframeResult') text = driver.find_element_by_xpath('/html/body').text print(text) time.sleep(5) driver.quit()
查看運行結(jié)果:
到此這篇關(guān)于Python爬蟲實現(xiàn)selenium處理iframe作用域問題的文章就介紹到這了,更多相關(guān)selenium iframe作用域內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
pandas中DataFrame字典互轉(zhuǎn)的實現(xiàn)
在數(shù)據(jù)處理和分析中,Pandas是一個非常強大的Python庫,本文主要介紹了pandas中DataFrame字典互轉(zhuǎn)的實現(xiàn),文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-04-04python類參數(shù)定義及數(shù)據(jù)擴展方式unsqueeze/expand
本文主要介紹了python類參數(shù)定義及數(shù)據(jù)擴展方式unsqueeze/expand,文章通過圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-08-08django-rest-swagger對API接口注釋的方法
今天小編就為大家分享一篇django-rest-swagger對API接口注釋的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08python實現(xiàn)超簡單端口轉(zhuǎn)發(fā)的方法
這篇文章主要介紹了python實現(xiàn)超簡單端口轉(zhuǎn)發(fā)的方法,實例分析了Python同構(gòu)socket實現(xiàn)端口轉(zhuǎn)發(fā)的技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-03-03Django?+?Taro?前后端分離項目實現(xiàn)企業(yè)微信登錄功能
這篇文章主要介紹了Django?+?Taro?前后端分離項目實現(xiàn)企業(yè)微信登錄功能,本文記錄一下企業(yè)微信登錄的流程,結(jié)合示例代碼給大家分享實現(xiàn)思路,需要的朋友可以參考下2022-04-04