पायथन सेलेनियम HTML स्रोत तक पहुंच


97

मैं पायथन के साथ सेलेनियम मॉड्यूल का उपयोग करके एक चर में HTML स्रोत कैसे प्राप्त कर सकता हूं ?

मैं ऐसा कुछ करना चाहता था:

from selenium import webdriver

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

मैं यह कैसे कर सकता हूँ? मुझे नहीं पता कि HTML स्रोत का उपयोग कैसे करें।


2
अगर हालत से पहले लाइन का पालन करें: html_source = browser.page_source
अब्दुल मजीद

जवाबों:


191

आपको page_sourceसंपत्ति तक पहुंचने की आवश्यकता है :

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
अब तक का सबसे अच्छा जवाब! ऐसा करने का सबसे तात्कालिक और स्पष्ट तरीका, इतना अधिक कॉम्पैक्ट कि दूसरा, अभी भी वैध, वैकल्पिक find_element_by_xpath("//*").get_attribute("outerHTML")(
5agado

13
यदि सभी जावास्क्रिप्ट निष्पादित होने के बाद हमें पृष्ठ स्रोत प्राप्त करने की आवश्यकता है तो क्या होगा? "
योगेश सेरालाथन

4
केवल तभी काम करता है जब पेज पूरी तरह से लोड हो गया हो। यदि पृष्ठ अनिश्चित काल तक लोड होता है तो यह संपत्ति काम नहीं करती है।
TheRookierLearner

5

Selenium2Library के साथ आप उपयोग कर सकते हैं get_source()

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

7
क्या मैं विलंब सेट कर सकता हूं और नवीनतम स्रोत प्राप्त कर सकता हूं? जावास्क्रिप्ट का उपयोग करके गतिशील सामग्री भरी हुई है।
कोडगुरू

4

Driver.page_source आपको पृष्ठ स्रोत कोड प्राप्त करने में मदद करेगा। आप यह देख सकते हैं कि पाठ पृष्ठ स्रोत में मौजूद है या नहीं।

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

आप एक चर में पृष्ठ स्रोत स्टोर करने के लिए चाहते हैं, के बाद रेखा से नीचे जोड़ने driver.get :

var_pgsource=driver.page_source

और अगर हालत में परिवर्तन :

if "your text here" in var_pgsource:

1
हालांकि यह कोड प्रश्न का उत्तर दे सकता है, लेकिन यह समस्या का हल कैसे और / या इसके बारे में अतिरिक्त संदर्भ प्रदान करता है, इससे उत्तर के दीर्घकालिक मूल्य में सुधार होगा।
निक 3500

2

पृष्ठ स्रोत का उपयोग करके आपको संपूर्ण HTML कोड मिलेगा।
तो पहले कोड या टैग का ब्लॉक तय करें जिसमें आपको डेटा को पुनः प्राप्त करने या तत्व को क्लिक करने की आवश्यकता है।

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

आप तत्वों को नाम, XPath, आईडी, लिंक और सीएसएस पथ से पा सकते हैं।


1

URL को urllib के लिए उपयोग करने के बारे में आपके प्रश्न का उत्तर देने के लिए, बस इस जावास्क्रिप्ट कोड को निष्पादित करें:

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

1

आप बस WebDriverऑब्जेक्ट का उपयोग कर सकते हैं , और इसके @propertyक्षेत्र के माध्यम से पृष्ठ स्रोत कोड तक पहुंच सकते हैं page_source...

इस कोड स्निपेट को आज़माएं :-)

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

यह उत्तर stackoverflow.com/a/7866938/2231972 से कैसे भिन्न होता है ?
रोमन कोनोवल

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

अब आप डेटा निकालने के लिए BeautifulSoup फ़ंक्शन लागू कर सकते हैं ...


-6

मैं सुझाव देता हूं कि स्रोत को urllib के साथ प्राप्त करें और, यदि आप पार्स करने जा रहे हैं, तो सुंदर सूप जैसे कुछ का उपयोग करें ।

import urllib

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

ठीक है फिर क्या आप जानते हैं कि मैं सेलेनियम के भीतर URL कैसे प्राप्त कर सकता हूं? मैं URL को एक वैरिएबल में स्टोर करना चाहता हूं ताकि मैं इसे urllib के साथ एक्सेस कर सकूं।
user1008791

@ user1008791 क्या यह मायने रखता है? आप जाहिरा तौर पर उपयोगकर्ता को रॉ_इनपुट का उपयोग करके इसे वैसे ही टाइप करने दे रहे हैं, बस वही करें लेकिन urllib के साथ।
ग्रिफिन

यह केवल एक आसान उदाहरण बनाने के लिए था, URL बहुत कुछ बदल रहा होगा।
user1008791

8
सेलेनियम कई चीजें करता है जो urllib (जावास्क्रिप्ट का निष्पादन) नहीं करता है।
एमपेंकोव

यहाँ urllib का उपयोग करना व्यर्थ है, क्यों? AutomatedTester में यह सही है, यह है कि मैं HTML स्रोत के माध्यम से स्कैनिंग के लिए यह सुनिश्चित करने के लिए करता हूं कि हम विकास पर्यावरण कोड को धक्का न दें।
डेव
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.