खोज बार में send_keys (पायथन) का उपयोग करने के बाद वेबसाइट से खोज परिणामों को पार्स कैसे करें?

Jan 05 2021

मेरा प्रश्न इस पोस्ट से संबंधित है: खोज बार में क्वेरी दर्ज करें और परिणाम परिमार्जन करें

मैं इस पूर्व प्रश्न के दिए गए उत्तर को निष्पादित करने में सक्षम हूं, लेकिन उस वेबसाइट से डेटा को परिमार्जन करने में सक्षम नहीं हूं जो क्रोम ओवर लूपिंग द्वारा नेविगेट करता है book। मुझे केवल ऐसे उत्तर मिले जो यह दिखाते हैं कि dअपने कोड में डेटा को कैसे परिमार्जन करना है , लेकिन उपयोग करने के बाद खोज परिणाम से नहीं send_keys

मैंने तत्व को एक्सेस करने की कोशिश की, लेकिन ऐसा नहीं कर सका और मैं खोज करने के बाद परिणामी वेबसाइट से डेटा को स्क्रैप करना चाहूंगा bookऔर फिर लूप के अगले दौर में जाऊंगा।

मैंने कोशिश की:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
d = webdriver.Chrome('mypath/chromedriver.exe')
books = ['9780062457738']
for book in books:
  d.get('https://www.bol.com/nl/')
  e = d.find_element_by_id('searchfor')
  f = print(e.send_keys(book, Keys.ENTER))

मैंने print()फंक्शन के बिना भी कोशिश की, लेकिन अगर मुझे टाइप किया जाए तो यह कोई वास्तविक तत्व नहीं देता है f?:

Type:        NoneType
String form: None
Docstring:   <no docstring>

खोज क्वेरी प्रस्तुत करने के बाद पुस्तक, शीर्षक या अन्य जानकारी के लेखक के उदाहरण के लिए डेटा पार्स करने में कोई मदद बहुत स्वागत है!

जवाब

DebanjanB Jan 05 2021 at 22:26

निकालने और पुस्तक का शीर्षक यानी करने के लिए नहीं एक एफ * सी.के. देने का सूक्ष्म कला आप को प्रेरित करने की जरूरत है WebDriverWait के लिए visibility_of_element_located()और आपको निम्न में से किसी का उपयोग कर सकते लोकेटर रणनीतियाँ :

  • का उपयोग कर CSS_SELECTOR:

    driver.get("https://www.bol.com/nl/")
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button.js-confirm-button>span"))).click()
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input#searchfor"))).send_keys("9780062457738")
    driver.find_element_by_css_selector("button[type='submit']").click()
    print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "a.product-title"))).get_attribute("innerHTML"))
    
  • का उपयोग कर XPATH:

    driver.get("https://www.bol.com/nl/")
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//span[text()='Accepteren']"))).click()
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@id='searchfor']"))).send_keys("9780062457738")
    driver.find_element_by_xpath("//button[@type='submit']").click()
    print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//a[contains(@class, 'product-title')]"))).get_attribute("innerHTML"))
    
  • कंसोल आउटपुट:

    The Subtle Art of Not Giving a F*ck
    
  • नोट : आपको निम्नलिखित आयात जोड़ने होंगे:

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