मैंने पढ़ा है , सेलेनियम प्रतीक्षा का उपयोग कैसे करें, स्पष्ट प्रतीक्षा करें और अन्य दस्तावेज़ एक पृष्ठ के लोड होने की प्रतीक्षा करने और फिर स्क्रैपिंग शुरू करने के लिए। प्रतीक्षा सफलतापूर्वक बीत जाती है लेकिन मुझे अभी भी वही आधा/अपूर्ण प्रस्तुत HTML कोड मिलता है।

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.common.exceptions import TimeoutException

# prepare the option for the chrome driver
options = webdriver.ChromeOptions()
options.add_argument('headless')

# start chrome browser
browser = webdriver.Chrome(options=options,executable_path='C:/chromedriver_win32/chromedriver.exe')
browser.get('https://swappa.com/listing/view/LTNZ94446')

try:
    WebDriverWait(browser, 30).until(EC.presence_of_element_located((By.ID, "wrap")))
    print(browser.page_source)
except TimeoutException:
    print("not found")

इसके लिए मेरा आउटपुट शीर्ष पर <html> के बजाय कहीं आधे रास्ते से शुरू होता है।

<div class="col-xs-6 col-sm-2 col-md-2">
                <div class="img-container" style="margin-bottom: 15px;">


                        <a href="https://static.swappa.com/media/listing/LTNZ94446/mhhHypyw.jpg" class="lightbox">
                            <img class="img-responsive" src="https://static.swappa.com/images/cache/7b/67/7b679a1d89816bc341a802f19f661eac.jpg" alt="Listing Image" style="margin:0px 0px 0px 0px; ">
                        </a>




                </div>
            </div>

मुझे यकीन नहीं है कि यह कहां गलत हो रहा है।

  • यह स्पष्ट रूप से तत्व आईडी की उपस्थिति को देखने में सक्षम है। (<div id="wrap">) क्योंकि यह टाइमआउट त्रुटि नहीं फेंकता
  • मैंने तत्व की दृश्यता का उपयोग करने की कोशिश की, फिर भी कोई भाग्य नहीं!
  • रेडीस्टेट भी लेकिन कोई भाग्य नहीं।

यदि अन्य पुस्तकालयों जैसे कि सुंदर सूप/यूआरएललिब/यूआरएललिब 2/स्क्रैपी का उपयोग करने के तरीके हैं, तो वे भी सहायक होंगे

0
Pirate X 30 पद 2019, 11:18
मुझे ऐसा ही एक प्रश्न मिला जो stackoverflow.com/a/30385843/8692977 में मदद कर सकता है। साथ ही, मैं अत्यधिक अनुशंसा करता हूं कि request_html को आजमाएं यह अपेक्षाकृत नया, उपयोग में आसान और शक्तिशाली है pypi.org/project/ अनुरोध-एचटीएमएल. यह लाइब्रेरी bs4, अनुरोध और सेलेनियम (js रेंडर करने के लिए) को बदल देगी
 – 
Marsilinou Zaky
30 पद 2019, 11:41
मैंने अपनी पोस्ट में उल्लेख किया है कि मैंने इस सटीक समाधान का उपयोग किया है और यह काम नहीं कर रहा है। मैं request_html एक कोशिश दूँगा
 – 
Pirate X
30 पद 2019, 11:48

3 जवाब

आप JavascriptExecutor के साथ एलीमेंट अस्तित्व का प्रयास कर सकते हैं।

शायद आपका जवाब यहां है।

0
Emre Baş 30 पद 2019, 11:34

आप जांच सकते हैं कि पृष्ठ जावास्क्रिप्ट का उपयोग करके पूरी तरह से लोड हो गया है या नहीं:

options = webdriver.ChromeOptions()
options.add_argument('headless')

# start chrome browser
browser = webdriver.Chrome(options=options)
browser.get('https://swappa.com/listing/view/LTNZ94446')

WebDriverWait(browser, 30).until(lambda d: d.execute_script(
        'return ["complete", "interactive"].indexOf(document.readyState) != -1'))

# or use only complete
# WebDriverWait(browser, 30).until(lambda d: d.execute_script('return document.readyState == "complete"'))
print(browser.page_source)
1
Sers 30 पद 2019, 12:13

आप अजगर requests मॉड्यूल का उपयोग कर सकते हैं।

कोड:

import requests
response=requests.get("https://swappa.com/listing/view/LTNZ94446")
if response.status_code==200:
    print(response.text)
0
KunduK 30 पद 2019, 12:17