Saya menggunakan binding Python untuk menjalankan Selenium WebDriver:
from selenium import webdriver
wd = webdriver.Firefox()
Saya tahu saya bisa mengambil elemen web seperti ini:
elem = wd.find_element_by_css_selector('#my-id')
Dan saya tahu saya bisa mendapatkan sumber halaman penuh dengan ...
wd.page_source
Tetapi apakah ada cara untuk mendapatkan "sumber elemen"?
elem.source # <-- returns the HTML as a string
Dokumen web selenium untuk Python pada dasarnya tidak ada dan saya tidak melihat apa pun dalam kode yang tampaknya mengaktifkan fungsi itu.
Adakah pemikiran tentang cara terbaik untuk mengakses HTML suatu elemen (dan anak-anaknya)?
wd.page_source
dengan beautifulsoupJawaban:
Anda bisa membaca
innerHTML
atribut untuk mendapatkan sumber konten elemen atauouterHTML
untuk sumber dengan elemen saat ini.Python:
Jawa:
C #:
Rubi:
JS:
PHP:
Diuji dan bekerja dengan
ChromeDriver
.sumber
getAttribute
metode (atau setara dalam bahasa lain) hanya memanggil metode js yang namanya arg. Namun dokumentasi tidak secara eksplisit mengatakan ini, jadi solusi nilesh harus menjadi mundur.HtmlUnitDriver
. Bekerja untukChromeDriver
,FirefoxDriver
,InternetExplorerDriver
(IE10) danPhantomJSDriver
(saya belum diuji orang lain).Sebenarnya tidak ada cara mudah untuk mendapatkan kode sumber html a
webelement
. Anda harus menggunakan JS. Saya tidak terlalu yakin tentang binding python tetapi Anda dapat dengan mudah melakukan ini di Jawa. Saya yakin pasti ada sesuatu yang mirip denganJavascriptExecutor
kelas di Python.sumber
innerHTML
bukan atribut DOM. Ketika saya menjawab pertanyaan ini pada tahun 2011, itu tidak berfungsi untuk saya, sepertinya sekarang beberapa browser mendukungnya. Jika itu bekerja untuk Anda maka menggunakaninnerHTML
lebih bersih. Namun tidak ada jaminan ini akan berfungsi pada semua browser.Tentu kita bisa mendapatkan semua kode sumber HTML dengan skrip di bawah ini di Selenium Python:
Jika Anda ingin menyimpannya ke file:
Saya sarankan menyimpan ke file karena kode sumber sangat panjang.
sumber
Di Ruby, menggunakan selenium-webdriver (2.32.1), ada
page_source
metode yang berisi seluruh sumber halaman.sumber
Menggunakan metode atribut, pada kenyataannya, lebih mudah dan lebih lurus ke depan.
Menggunakan Ruby dengan permata Selenium dan PageObject, untuk mendapatkan kelas yang terkait dengan elemen tertentu, garis itu akan menjadi
element.attribute(Class)
.Konsep yang sama berlaku jika Anda ingin membuat atribut lain terikat ke elemen. Misalnya, jika saya ingin String elemen
element.attribute(String)
,.sumber
Terlihat usang, tetapi tetap ada di sini. Cara yang benar untuk melakukannya dalam kasus Anda:
atau
Keduanya bekerja untuk saya (selenium-server-standalone-2.35.0)
sumber
Java dengan Selenium 2.53.0
sumber
getPageSource
metode ini mungkin tidak mengembalikan sumber halaman yang sebenarnya (yaitu dengan kemungkinan perubahan javascript). Sumber yang dikembalikan mungkin sumber baku yang dikirim oleh server. Doc webdriver harus diperiksa untuk memastikan hal ini.Saya harap ini bisa membantu: http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/WebElement.html
Berikut ini dijelaskan metode Java:
Namun sayangnya itu tidak tersedia dalam Python. Jadi Anda dapat menerjemahkan nama metode ke Python dari Jawa dan mencoba logika lain menggunakan metode ini tanpa mendapatkan sumber seluruh halaman ...
Misalnya
sumber
Ini bekerja dengan mulus untuk saya.
sumber
InnerHTML akan mengembalikan elemen di dalam elemen yang dipilih dan outerHTML akan kembali ke dalam HTML bersama dengan elemen yang telah Anda pilih
Contoh: - Sekarang anggap Elemen Anda adalah seperti di bawah ini
Output elemen innerHTML
Output elemen outerHTML
Contoh Langsung: -
http://www.java2s.com/Tutorials/JavascriptDemo/f/find_out_the_difference_between_innerhtml_and_outerhtml_in_javascript_example.htm
Di bawah ini Anda akan menemukan sintaksis yang memerlukan sesuai pengikatan berbeda. Ubah
innerHTML
keouterHTML
sesuai yang diperlukan.Python:
Jawa:
Jika Anda ingin seluruh halaman HTML gunakan kode di bawah ini: -
sumber
Kode ini juga berfungsi untuk mendapatkan JavaScript dari sumber!
sumber
Dan dalam tes selenium PHPUnit seperti ini:
sumber
Jika Anda tertarik pada solusi untuk Remote Control dengan Python, berikut ini cara mendapatkan innerHTML:
sumber
innerHTML = {solenium selector code}.text
karya yang sama.Metode untuk mendapatkan terjemahan HTML yang saya sukai adalah sebagai berikut:
Namun metode di atas menghapus semua tag (ya tag bersarang juga) dan hanya mengembalikan konten teks. Jika Anda tertarik untuk mendapatkan markup HTML juga, maka gunakan metode di bawah ini.
sumber