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.


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

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()

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:

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.


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;")

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

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


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

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.