खोज बार में send_keys (पायथन) का उपयोग करने के बाद वेबसाइट से खोज परिणामों को पार्स कैसे करें?
मेरा प्रश्न इस पोस्ट से संबंधित है: खोज बार में क्वेरी दर्ज करें और परिणाम परिमार्जन करें
मैं इस पूर्व प्रश्न के दिए गए उत्तर को निष्पादित करने में सक्षम हूं, लेकिन उस वेबसाइट से डेटा को परिमार्जन करने में सक्षम नहीं हूं जो क्रोम ओवर लूपिंग द्वारा नेविगेट करता है 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>
खोज क्वेरी प्रस्तुत करने के बाद पुस्तक, शीर्षक या अन्य जानकारी के लेखक के उदाहरण के लिए डेटा पार्स करने में कोई मदद बहुत स्वागत है!
जवाब
निकालने और पुस्तक का शीर्षक यानी करने के लिए नहीं एक एफ * सी.के. देने का सूक्ष्म कला आप को प्रेरित करने की जरूरत है 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