Korzystam z powiązań Python do uruchamiania Selenium WebDriver:
from selenium import webdriver
wd = webdriver.Firefox()
Wiem, że mogę pobrać taki element sieciowy:
elem = wd.find_element_by_css_selector('#my-id')
I wiem, że mogę uzyskać pełne źródło strony dzięki ...
wd.page_source
Ale czy w ogóle można uzyskać „źródło elementu”?
elem.source # <-- returns the HTML as a string
Dokumenty selenium webdriver dla Pythona w zasadzie nie istnieją i nie widzę w kodzie nic, co zdawałoby się włączać tę funkcjonalność.
Masz jakieś przemyślenia na temat najlepszego sposobu uzyskania dostępu do HTML elementu (i jego dzieci)?
wd.page_source
pomocą beautifulsoupOdpowiedzi:
Możesz odczytać
innerHTML
atrybut, aby uzyskać źródło treści elementu lubouterHTML
źródło z bieżącym elementem.Pyton:
Jawa:
DO#:
Rubin:
JS:
PHP:
Testowany i współpracuje z
ChromeDriver
.źródło
getAttribute
metoda (lub równoważna w innych językach) po prostu wywołuje metodę js o nazwie arg. Jednak dokumentacja tego wyraźnie nie mówi, więc rozwiązaniem Nilesha powinno być rozwiązanie awaryjne.HtmlUnitDriver
. Działa naChromeDriver
,FirefoxDriver
,InternetExplorerDriver
(IE10) iPhantomJSDriver
(nie testowałem inne).Tak naprawdę nie ma prostego sposobu uzyskania kodu źródłowego HTML
webelement
. Będziesz musiał użyć JS. Nie jestem zbyt pewny co do powiązań Pythona, ale możesz to łatwo zrobić w Javie. Jestem pewien, żeJavascriptExecutor
w Pythonie musi być coś podobnego do klasy.źródło
innerHTML
nie jest atrybutem DOM. Kiedy odpowiedziałem na to pytanie w 2011 roku, nie działało to dla mnie, wygląda na to, że teraz niektóre przeglądarki go obsługują. Jeśli to działa, to używanieinnerHTML
jest czystsze. Jednak nie ma gwarancji, że będzie działać na wszystkich przeglądarkach.Na pewno możemy pobrać cały kod źródłowy HTML za pomocą tego skryptu poniżej w Selenium Python:
Jeśli chcesz zapisać go do pliku:
Sugeruję zapisanie do pliku, ponieważ kod źródłowy jest bardzo długi.
źródło
W Ruby, używając selenium-webdriver (2.32.1), istnieje
page_source
metoda, która zawiera całe źródło strony.źródło
Korzystanie z metody atrybutu jest w rzeczywistości łatwiejsze i bardziej bezpośrednie.
Używając Ruby z klejnotami Selenium i PageObject, aby powiązać klasę z określonym elementem, linia byłaby
element.attribute(Class)
.Ta sama koncepcja obowiązuje, jeśli chcesz powiązać inne atrybuty z elementem. Na przykład, jeśli chciałem ciąg pierwiastka
element.attribute(String)
.źródło
Wygląda na przestarzałe, ale niech i tak tu będzie. Właściwy sposób to zrobić w twoim przypadku:
lub
Oba działają dla mnie (selenium-server-standalone-2.35.0)
źródło
Java z Selenium 2.53.0
źródło
getPageSource
metoda może nie zwrócić faktycznego źródła strony (tj. Z możliwymi zmianami w javascript). Zwróconym źródłem może być surowe źródło wysłane przez serwer. Dokument webdriver musi zostać sprawdzony, aby zapewnić ten punkt.Mam nadzieję, że to może pomóc: http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/WebElement.html
Oto opis metody Java:
Ale niestety nie jest dostępny w Pythonie. Możesz więc przetłumaczyć nazwy metod na Python z Javy i wypróbować inną logikę przy użyciu obecnych metod bez pobierania całego źródła strony ...
Na przykład
źródło
To działa dla mnie bezproblemowo.
źródło
InnerHTML zwróci element wewnątrz wybranego elementu, a outerHTML zwróci wewnątrz HTML wraz z wybranym elementem
Przykład: - Załóżmy teraz, że Twój element jest jak poniżej
element innerHTML Wyjście
element outerHTML Wyjście
Przykład na żywo: -
http://www.java2s.com/Tutorials/JavascriptDemo/f/find_out_the_difference_between_innerhtml_and_outerhtml_in_javascript_example.htm
Poniżej znajdziesz składnię, która wymaga różnych powiązań. Zmień
innerHTML
naouterHTML
zgodnie z wymaganiami.Pyton:
Jawa:
Jeśli chcesz HTML całej strony, użyj poniższego kodu: -
źródło
Ten kod naprawdę działa również w celu pobrania JavaScript ze źródła!
źródło
A w teście selenu PHPUnit wygląda to tak:
źródło
Jeśli interesuje Cię rozwiązanie do zdalnego sterowania w Pythonie, oto jak uzyskać innerHTML:
źródło
innerHTML = {solenium selector code}.text
prace są takie same.Preferowaną metodą uzyskania renderowanego HTML jest:
Jednak powyższa metoda usuwa wszystkie tagi (tak również tagi zagnieżdżone) i zwraca tylko treść tekstową. Jeśli chcesz uzyskać znaczniki HTML, skorzystaj z poniższej metody.
źródło