HTML 소스에 액세스하는 Python Selenium


97

Python과 함께 Selenium 모듈을 사용하여 변수에서 HTML 소스를 얻으려면 어떻게 해야합니까?

다음과 같이하고 싶었습니다.

from selenium import webdriver

browser = webdriver.Firefox()
browser.get("http://example.com")
if "whatever" in html_source:
    # Do something
else:
    # Do something else

어떻게 할 수 있습니까? HTML 소스에 액세스하는 방법을 모르겠습니다.


2
다음 줄을 쓰기 전에 조건의 경우 : html_source = browser.page_source
— 압둘 마지드

답변:


192

다음 page_source속성 에 액세스해야 합니다.

from selenium import webdriver

browser = webdriver.Firefox()
browser.get("http://example.com")

html_source = browser.page_source
if "whatever" in html_source:
    # do something
else:
    # do something else

6
지금까지 최고의 답변! 이를 수행하는 가장 즉각적이고 명확한 방법은 다른 것보다 훨씬 더 간결하고 여전히 유효한 대안입니다 find_element_by_xpath("//*").get_attribute("outerHTML")(
— 5agado

13
모든 자바 스크립트가 실행 된 후 페이지 소스를 가져와야한다면?
— Yogeesh Seralathan 2014-06-13

4
페이지가 완전히로드 된 경우에만 작동합니다. 페이지가 무기한로드되는 경우이 속성은 작동하지 않습니다.
— TheRookierLearner

5

Selenium2Library를 사용하면 다음을 사용할 수 있습니다. get_source()

import Selenium2Library
s = Selenium2Library.Selenium2Library()
s.open_browser("localhost:7080", "firefox")
source = s.get_source()

7
지연을 설정하고 최신 소스를 얻을 수 있습니까? 자바 스크립트를 사용하여로드 된 동적 콘텐츠가 있습니다.
— CodeGuru 2013-10-17

4

driver.page_source 는 페이지 소스 코드를 얻는 데 도움이됩니다. 페이지 소스에 텍스트가 있는지 여부를 확인할 수 있습니다.

from selenium import webdriver
driver = webdriver.Firefox()
driver.get("some url")
if "your text here" in driver.page_source:
    print('Found it!')
else:
    print('Did not find it.')

페이지 소스를 변수에 저장하려면 driver.get 뒤에 아래 줄을 추가하십시오 .

var_pgsource=driver.page_source

if 조건을 다음으로 변경하십시오 .

if "your text here" in var_pgsource:

1
이 코드가 질문에 답할 수 있지만 문제를 해결하는 방법 및 / 또는 이유에 대한 추가 컨텍스트를 제공하면 답변의 장기적인 가치가 향상됩니다.
— Nic3500

2

페이지 소스를 사용하면 전체 HTML 코드를 얻을 수 있습니다.
따라서 먼저 데이터를 검색하거나 요소를 클릭하는 데 필요한 코드 또는 태그 블록을 결정합니다.

options = driver.find_elements_by_name_("XXX")
for option in options:
    if option.text == "XXXXXX":
        print(option.text)
        option.click()

이름, XPath, ID, 링크 및 CSS 경로로 요소를 찾을 수 있습니다.


1

urllib에 사용할 URL 을 가져 오는 것에 대한 질문에 답하려면 다음 JavaScript 코드를 실행하십시오.

url = browser.execute_script("return window.location;")

1

단순히 WebDriver개체 를 사용하고 해당 @property필드 를 통해 페이지 소스 코드에 액세스 할 수 있습니다 page_source.

이 코드 스 니펫을 사용해보십시오 :-)

from selenium import webdriver
driver = webdriver.Firefox('path/to/executable')
driver.get('https://some-domain.com')
source = driver.page_source
if 'stuff' in source:
    print('found...')
else:
    print('not in source...')

이 답변은 stackoverflow.com/a/7866938/2231972 와 어떻게 다른 가요?
— Roman Konoval

1
from bs4 import BeautifulSoup
from selenium import webdriver

driver = webdriver.Chrome()
html_source_code = driver.execute_script("return document.body.innerHTML;")
html_soup: BeautifulSoup = BeautifulSoup(html_source_code, 'html.parser')

이제 BeautifulSoup 기능을 적용하여 데이터를 추출 할 수 있습니다.


-6

urllib로 소스를 가져 오는 것이 좋습니다. 파싱 ​​할 경우 Beautiful Soup 과 같은 것을 사용합니다 .

import urllib

url = urllib.urlopen("http://example.com") # Open the URL.
content = url.readlines() # Read the source and save it to a variable.

좋아 그럼 내가 Selenium 내에서 URL을 어떻게 얻을 수 있는지 알아? urllib로 액세스 할 수 있도록 URL을 변수에 저장하고 싶습니다.
— user1008791

@ user1008791 중요합니까? 어쨌든 raw_input을 사용하여 사용자가 입력하도록 허용하고 있지만 urllib를 사용하여 동일하게 수행하십시오.
— 그리핀

쉬운 예를 들자면 URL이 많이 변경 될 것입니다.
— user1008791

8
Selenium은 urllib가 수행하지 않는 많은 작업을 수행합니다 (예 : JavaScript 실행).
— mpenkov

여기서 urllib를 사용하는 것은 무의미합니다. 왜 그렇습니까? AutomatedTester가 정확합니다. 개발 환경 코드를 푸시하지 않도록 HTML 소스를 스캔하기 위해 제가하는 일입니다.
— Dave
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.