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
if条件の前に次の行を記述:html_source = browser.page_source
Abdul Majeed

回答:


191

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
すべてのJavaScriptの実行後にページソースを取得する必要がある場合はどうなりますか?
Yogeesh Seralathan

4
ページが完全に読み込まれた場合にのみ機能します。ページが無期限に読み込まれると、このプロパティは機能しません。
TheRookierLearner 2014年

5

Selenium2Libraryを使用すると、 get_source()

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

7
遅延を設定して最新のソースを取得できますか?JavaScriptを使用して読み込まれた動的コンテンツがあります。
CodeGuru 2013年

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 2010年

@ user1008791それは重要ですか?どうやらユーザーはraw_inputを使用して入力を許可しているようですが、同じことをurllibで行います。
グリフィン

これは簡単な例を示すためのものであり、URLは大きく変化します。
user1008791 2010年

8
Seleniumはurllibではできない多くのことを行います(例:JavaScriptの実行)。
mpenkov 2012

ここでurllibを使用しても意味がないのはなぜですか?AutomatedTesterにはそれが正しく、開発環境のコードをプッシュしないようにするために、HTMLソースをスキャンするために行うことです。
デイブ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.