Pertanyaan Dapatkan Sumber HTML WebElement di Selenium WebDriver menggunakan Python


Saya menggunakan binding Python untuk menjalankan Selenium WebDriver.

from selenium import webdriver
wd = webdriver.Firefox()

Aku tahu aku bisa mengambil webelemen seperti itu ...

elem = wd.find_element_by_css_selector('#my-id')

Dan saya tahu saya bisa mendapatkan sumber laman lengkap dengan ...

wd.page_source

Tetapi apakah ada pula untuk mendapatkan "sumber elemen"?

elem.source   # <-- returns the HTML as a string

Dokumentasi webenium selenium untuk Python pada dasarnya tidak ada dan saya tidak melihat apa pun dalam kode yang tampaknya memungkinkan fungsionalitas itu.

Pikiran apa pun tentang cara terbaik untuk mengakses HTML elemen (dan anak-anaknya)?


321
2017-08-31 21:44


asal


Jawaban:


Kamu bisa membaca innerHTML atribut untuk mendapatkan sumber konten elemen atau outerHTML untuk sumber dengan elemen saat ini.

Python:

element.get_attribute('innerHTML')

Jawa:

elem.getAttribute("innerHTML");

C #:

element.GetAttribute("innerHTML");

Rubi:

element.attribute("innerHTML")

JS:

element.getAttribute('innerHTML');

PHP:

$elem.getAttribute('innerHTML');

Diuji dan bekerja dengan ChromeDriver.


514
2017-12-20 12:49



Sebenarnya tidak ada cara langsung untuk mendapatkan kode sumber html dari suatu webelement. Anda harus menggunakan JS. Saya tidak terlalu yakin tentang python binding tetapi Anda dapat dengan mudah melakukan hal seperti ini di Java. Saya yakin pasti ada sesuatu yang mirip dengan itu JavascriptExecutor kelas dengan Python.

 WebElement element = driver.findElement(By.id("foo"));
 String contents = (String)((JavascriptExecutor)driver).executeScript("return arguments[0].innerHTML;", element); 

78
2017-09-03 03:29



Tentu kita bisa mendapatkan semua kode sumber HTML dengan skrip ini di bawah ini di Selenium Python:

elem = driver.find_element_by_xpath("//*")
source_code = elem.get_attribute("outerHTML")

Jika Anda ingin menyimpannya ke file:

f = open('c:/html_source_code.html', 'w')
f.write(source_code.encode('utf-8'))
f.close()

Saya menyarankan Anda menyimpan file karena kode sumber sangat panjang.


55
2018-03-20 18:08



Di Ruby, menggunakan selenium-webdriver (2.32.1), ada a page_source metode yang berisi seluruh sumber halaman.


10
2018-04-15 20:59



Menggunakan metode atribut sebenarnya lebih mudah dan lebih lurus ke depan.

Menggunakan Ruby dengan permata Selenium dan PageObject, untuk mendapatkan kelas yang terkait dengan elemen tertentu, garis akan menjadi element.attribute(Class).

Konsep yang sama berlaku jika Anda ingin mendapatkan atribut lain yang terkait dengan elemen. Misalnya, jika saya menginginkan String elemen, element.attribute(String).


3
2018-03-22 15:46



Terlihat ketinggalan jaman, tetapi tetaplah di sini. Cara yang benar untuk melakukannya dalam kasus Anda:

elem = wd.find_element_by_css_selector('#my-id')
html = wd.execute_script("return arguments[0].innerHTML;", elem)

atau

html = elem.get_attribute('innerHTML')

Keduanya bekerja untuk saya (selenium-server-standalone-2.35.0)


3
2018-03-06 14:52



Java dengan Selenium 2.53.0

driver.getPageSource();

1
2018-03-29 21:25



Saya harap ini bisa membantu: http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/WebElement.html

Di sini dijelaskan metode Java:

java.lang.String    getText() 

Tapi sayangnya itu tidak tersedia di Python. Jadi Anda dapat menerjemahkan nama metode ke Python dari Java dan mencoba logika lain menggunakan metode ini tanpa mendapatkan seluruh sumber halaman ...

Misalnya.

 my_id = elem[0].get_attribute('my-id')

1
2017-09-07 14:23



Dan dalam uji selenium PHPUnit itu seperti ini:

$text = $this->byCssSelector('.some-class-nmae')->attribute('innerHTML');

0
2018-05-30 10:25



Jika Anda tertarik dengan solusi untuk Remote Control dengan Python, berikut ini cara mendapatkan innerHTML:

innerHTML = sel.get_eval("window.document.getElementById('prodid').innerHTML")

0
2017-07-09 14:18