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.