2017-11-11 4 views
2

현재 웹 사이트에서 모든 iframe 태그를 검색하기 위해 셀렌과 BeautifulSoup를 사용하려고합니다. 문제는 BS4가 검색하지 않는 웹 페이지 내에 내부 HTML 문서가 있기 때문에 모든 iframe을 얻지 못하고 있기 때문에 일부 HTML 요소가 없을 수 있으므로 JavaScript가 HTML 내에서 실행되고 있다고 생각하지 않습니다. 렌더링. URL을 요청하고 HTML 파일을 렌더링 한 js를 검색 한 다음 DOM을 검색하고 iframe과 일치하는 모든 태그를 내부 HTML 코드에서 가져올 수있는 웹 스크래핑 도구가 있습니까?웹 사이트에서 HTML 소스를 렌더링하고 모든 iframe 태그를 찾으십시오.

기본적으로 크롬 관리자 도구에서 원하는 모든 태그를 볼 수 있지만 BS4의 find_all ('iframe') 함수에서 검색 한 목록에는 표시되지 않습니다.

from selenium import webdriver 

browser = webdriver.Firefox(executable_path=r'C:\Utility\BrowserDrivers\geckodriver.exe') 
browser.get("https://reddit.com") 
frames_tag = browser.find_elements_by_tag_name("iframe") 
frames_xpath = browser.find_elements_by_xpath("//iframe") 
frames_css = browser.find_elements_by_css_selector("iframe") 
print("Frames detected through iframe tag are %s" %frames_tag) 
print("Frames detected through xpath are %s" %frames_xpath) 
print("Frames detected through css are %s" %frames_css) 
browser.quit() 

내 콘솔 출력은 다음과 같습니다

from bs4 import BeautifulSoup 

import requests 

from selenium import webdriver 

browser = webdriver.Chrome('C:/Users/G/chromedriver.exe') 

browser.get("https://reddit.com") 

HTML = browser.page_source 

innerHTML = browser.execute_script("return document.body.innerHTML") 

page = BeautifulSoup(innerHTML, 'html.parser') 

for iframe in page.find_all('iframe'): 
    print(iframe) 

browser.close() 

답변

0
당신은 모든 <iframe> 태그를 얻을 수

독점적으로 다음 코드 블록 Selenium을 통해 다음과 같습니다

는 내가 가지고있는 코드입니다 :

Frames detected through iframe tag are [<selenium.webdriver.firefox.webelement.FirefoxWebElement (session="98594106-54a6-4941-a6ab-cd9d92e9afa2", element="ead39d06-0e39-4b40-9425-a86a1fe88d4f")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="98594106-54a6-4941-a6ab-cd9d92e9afa2", element="1ce10f29-a620-4ce6-90e1-9da563046c70")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="98594106-54a6-4941-a6ab-cd9d92e9afa2", element="ba8493e4-8246-47a0-9ed4-3f51b8c0f133")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="98594106-54a6-4941-a6ab-cd9d92e9afa2", element="19c0f134-c243-47bd-96d1-6b06ff66a011")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="98594106-54a6-4941-a6ab-cd9d92e9afa2", element="95d78fa6-fb4f-4b7c-89c5-9b85965f0e4c")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="98594106-54a6-4941-a6ab-cd9d92e9afa2", element="e6d2d931-1f35-432f-8825-052e244fe798")>] 
Frames detected through xpath are [<selenium.webdriver.firefox.webelement.FirefoxWebElement (session="98594106-54a6-4941-a6ab-cd9d92e9afa2", element="ead39d06-0e39-4b40-9425-a86a1fe88d4f")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="98594106-54a6-4941-a6ab-cd9d92e9afa2", element="1ce10f29-a620-4ce6-90e1-9da563046c70")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="98594106-54a6-4941-a6ab-cd9d92e9afa2", element="ba8493e4-8246-47a0-9ed4-3f51b8c0f133")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="98594106-54a6-4941-a6ab-cd9d92e9afa2", element="19c0f134-c243-47bd-96d1-6b06ff66a011")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="98594106-54a6-4941-a6ab-cd9d92e9afa2", element="95d78fa6-fb4f-4b7c-89c5-9b85965f0e4c")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="98594106-54a6-4941-a6ab-cd9d92e9afa2", element="e6d2d931-1f35-432f-8825-052e244fe798")>] 
Frames detected through css are [<selenium.webdriver.firefox.webelement.FirefoxWebElement (session="98594106-54a6-4941-a6ab-cd9d92e9afa2", element="ead39d06-0e39-4b40-9425-a86a1fe88d4f")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="98594106-54a6-4941-a6ab-cd9d92e9afa2", element="1ce10f29-a620-4ce6-90e1-9da563046c70")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="98594106-54a6-4941-a6ab-cd9d92e9afa2", element="ba8493e4-8246-47a0-9ed4-3f51b8c0f133")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="98594106-54a6-4941-a6ab-cd9d92e9afa2", element="19c0f134-c243-47bd-96d1-6b06ff66a011")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="98594106-54a6-4941-a6ab-cd9d92e9afa2", element="95d78fa6-fb4f-4b7c-89c5-9b85965f0e4c")>, <selenium.webdriver.firefox.webelement.FirefoxWebElement (session="98594106-54a6-4941-a6ab-cd9d92e9afa2", element="e6d2d931-1f35-432f-8825-052e244fe798")>] 
+0

이것은 효과가 있었다. find_elements_by_tag_name을 호출하기 전에 잠자기 시간을 추가해야하고 더 많은 iframe을 찾았습니다. 어쨌든 당신은 iframe에 의해 생성 된 내부 html을 요청하는 방법을 알고 있습니까? – user8922432