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.