Python Selenium mengakses sumber HTML

97

Bagaimana saya bisa mendapatkan sumber HTML dalam variabel menggunakan modul Selenium dengan Python?

Saya ingin melakukan sesuatu seperti ini:

from selenium import webdriver

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

Bagaimana saya bisa melakukan ini? Saya tidak tahu cara mengakses sumber HTML.

pengguna1008791
sumber
2
Tuliskan baris berikut sebelumnya jika kondisi: html_source = browser.page_source
Abdul Majeed

Jawaban:

192

Anda perlu mengakses page_sourceproperti:

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
AutomatedTester
sumber
6
Jawaban terbaik sejauh ini! Cara paling cepat dan jelas untuk melakukan ini, jauh lebih ringkas daripada yang lain, masih valid, alternatif ( find_element_by_xpath("//*").get_attribute("outerHTML")(
5agado
13
Bagaimana jika kita perlu mendapatkan sumber halaman setelah semua javascript dijalankan.?
Yogeesh Seralathan
4
Hanya berfungsi jika halaman telah dimuat sepenuhnya. Jika halaman memuat tanpa batas waktu, properti ini tidak berfungsi.
TheRookierLearner
5

Dengan Selenium2Library Anda dapat menggunakan get_source()

import Selenium2Library
s = Selenium2Library.Selenium2Library()
s.open_browser("localhost:7080", "firefox")
source = s.get_source()
Milanka
sumber
7
Dapatkah saya menyetel penundaan dan mendapatkan sumber terbaru? Ada konten dinamis yang dimuat menggunakan javascript.
CodeGuru
4

driver.page_source akan membantu Anda mendapatkan kode sumber halaman. Anda dapat memeriksa apakah teks ada di sumber halaman atau tidak.

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.')

Jika Anda ingin menyimpan sumber halaman dalam variabel, tambahkan baris di bawah ini setelah driver.get :

var_pgsource=driver.page_source

dan ubah kondisi if menjadi:

if "your text here" in var_pgsource:
Dhiraj
sumber
1
Meskipun kode ini dapat menjawab pertanyaan, memberikan konteks tambahan tentang bagaimana dan / atau mengapa kode ini memecahkan masalah akan meningkatkan nilai jawaban jangka panjang.
Nic3500
2

Dengan menggunakan sumber halaman Anda akan mendapatkan seluruh kode HTML.
Jadi pertama-tama tentukan blok kode atau tag yang Anda perlukan untuk mengambil data atau mengklik elemen ..

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

Anda dapat menemukan elemen dengan nama, XPath, id, link dan jalur CSS.

Mahesh Reddy Atla
sumber
1

Untuk menjawab pertanyaan Anda tentang mendapatkan URL yang akan digunakan untuk urllib, cukup jalankan kode JavaScript ini:

url = browser.execute_script("return window.location;")
Bob Evans
sumber
1

Anda cukup menggunakan WebDriverobjek, dan akses ke kode sumber halaman melalui @propertybidangnyapage_source ...

Coba cuplikan kode ini :-)

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...')
SysMurff
sumber
bagaimana jawaban ini berbeda dari 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')

Sekarang Anda dapat menerapkan fungsi BeautifulSoup untuk mengekstrak data ...

mobin alhassan
sumber
-6

Saya akan merekomendasikan untuk mendapatkan sumber dengan urllib dan, jika Anda akan mengurai, gunakan sesuatu seperti 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.
Grifon
sumber
Oke, apakah Anda tahu bagaimana saya bisa mendapatkan URL di dalam Selenium? Saya ingin menyimpan URL dalam variabel sehingga saya dapat mengaksesnya dengan urllib.
pengguna1008791
@ user1008791 Apakah itu penting? Anda tampaknya membiarkan pengguna mengetiknya dengan menggunakan raw_input, lakukan hal yang sama tetapi dengan urllib.
Griffin
Itu hanya untuk membuat contoh yang mudah, URL-nya akan banyak berubah.
pengguna1008791
8
Selenium melakukan banyak hal yang tidak dilakukan urllib (mis. Eksekusi JavaScript).
mpenkov
Menggunakan urllib di sini tidak ada gunanya, mengapa? AutomatedTester sudah benar, itulah yang saya lakukan untuk memindai melalui sumber HTML untuk memastikan kami tidak mendorong kode lingkungan pengembangan.
Dave