วิธีแยกวิเคราะห์ผลการค้นหาจากเว็บไซต์หลังจากใช้ send_keys (Python) ในแถบค้นหา
คำถามของฉันเกี่ยวข้องกับโพสต์นี้: ป้อนคำค้นหาในแถบค้นหาและขูดผลลัพธ์
ฉันสามารถที่จะดำเนินการคำตอบให้กับคำถามนี้ในอดีต แต่ฉันไม่สามารถขูดข้อมูลจากเว็บไซต์ที่นำทางให้ Chrome 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>
ความช่วยเหลือใด ๆ ในการแยกวิเคราะห์ข้อมูลเช่นผู้แต่งหนังสือชื่อเรื่องหรือข้อมูลอื่น ๆหลังจากส่งคำค้นหาแล้วยินดีเป็นอย่างยิ่ง!
คำตอบ
การสกัดและชื่อหนังสือคือศิลปะที่ละเอียดอ่อนของการให้ไม่ได้ F * CKคุณต้องการที่จะทำให้เกิด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