Python Selenium HTML kaynağına erişiyor


98

Python ile Selenium modülünü kullanarak bir değişkendeki HTML kaynağını nasıl alabilirim ?

Bunun gibi bir şey yapmak istedim:

from selenium import webdriver

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

Bunu nasıl yapabilirim? HTML kaynağına nasıl erişeceğimi bilmiyorum.


2
İf koşulundan önce aşağıdaki satırı yazın: html_source = browser.page_source
Abdul Majeed

Yanıtlar:


194

page_sourceMülke erişmeniz gerekiyor :

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
Şimdiye kadarki en iyi cevap! Bunu yapmanın en hızlı ve net yolu, diğerinden çok daha kompakt, hala geçerli alternatif ( find_element_by_xpath("//*").get_attribute("outerHTML")(
5agado

14
Ya tüm javascript çalıştırıldıktan sonra sayfa kaynağına ihtiyacımız olursa?
Yogeesh Seralathan

4
Yalnızca sayfa tamamen yüklendiğinde çalışır. Sayfa süresiz olarak yüklenirse bu özellik çalışmaz.
TheRookierLearner

5

Selenium2Library ile kullanabilirsiniz get_source()

import Selenium2Library
s = Selenium2Library.Selenium2Library()
s.open_browser("localhost:7080", "firefox")
source = s.get_source()

8
Bir gecikme belirleyip en son kaynağı alabilir miyim? JavaScript kullanılarak yüklenen dinamik içerikler var.
CodeGuru

4

driver.page_source , sayfa kaynak kodunu almanıza yardımcı olacaktır. Metnin sayfa kaynağında mevcut olup olmadığını kontrol edebilirsiniz.

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

Sayfa kaynağını bir değişkende saklamak istiyorsanız, driver.get'den sonra aşağıdaki satırı ekleyin :

var_pgsource=driver.page_source

ve if koşulunu şu şekilde değiştirin:

if "your text here" in var_pgsource:

1
Bu kod soruyu yanıtlayabilirken, sorunun nasıl ve / veya neden çözüldüğüne ilişkin ek bağlam sağlamak, yanıtlayanın uzun vadeli değerini artıracaktır.
Nic3500

2

Sayfa kaynağını kullanarak tüm HTML kodunu alacaksınız.
Bu nedenle, önce verileri almanız veya öğeyi tıklamanız gereken kod bloğuna veya etiketine karar verin.

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

Öğeleri ada, XPath, id, bağlantı ve CSS yoluna göre bulabilirsiniz.


1

Urllib için kullanılacak URL'yi alma ile ilgili sorunuza cevap vermek için , şu JavaScript kodunu çalıştırmanız yeterlidir:

url = browser.execute_script("return window.location;")

1

Basitçe WebDrivernesneyi kullanabilir ve @propertyalanı aracılığıyla sayfa kaynak koduna erişebilirsiniz page_source...

Bu kod parçacığını deneyin :-)

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

bu yanıt stackoverflow.com/a/7866938/2231972'den nasıl farklıdır ?
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')

Artık verileri ayıklamak için BeautifulSoup işlevini uygulayabilirsiniz ...


-6

Kaynağı urllib ile almanızı ve ayrıştıracaksanız Beautiful Soup gibi bir şey kullanmanızı öneririm .

import urllib

url = urllib.urlopen("http://example.com") # Open the URL.
content = url.readlines() # Read the source and save it to a variable.

Tamam o zaman Selenium'da URL'yi nasıl alabileceğimi biliyor musunuz? URL'yi bir değişken içinde saklamak istiyorum, böylece ona urllib ile erişebilirim.
user1008791

@ user1008791 önemli mi? Görünüşe göre kullanıcının raw_input kullanarak yazmasına izin veriyorsunuz, sadece aynısını yapın ama urllib ile.
Griffin

Bu sadece kolay bir örnek vermek içindi, URL çok değişecek.
user1008791

8
Selenium, urllib'in yapmadığı pek çok şeyi yapar (örn. JavaScript'in çalıştırılması).
mpenkov

Urllib'i burada kullanmak anlamsız, neden? AutomatedTester'da doğru var, geliştirme ortamı kodunu zorlamadığımızdan emin olmak için HTML kaynağı üzerinden tarama yapmak için yaptığım şey bu.
Dave
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.