Arama çubuğunda send_keys (Python) kullandıktan sonra web sitesindeki arama sonuçları nasıl ayrıştırılır?
Sorum şu gönderiyle ilgili: Arama çubuğuna sorgu girin ve sonuçları kazıyın
Bu önceki soruya verilen cevabı uygulayabiliyorum, ancak Chrome'un dönerek gezindiği web sitesinden veri kazıyamıyorum book
. Yalnızca kodumdaki verileri nasıl kazıyacağımı gösteren yanıtlar buldum d
, ancak kullandıktan sonra arama sonucundan değil send_keys
.
Öğeye erişmeyi denedim, ancak bunu yapamıyorum ve aradıktan book
ve ardından döngünün bir sonraki turuna geçtikten sonra elde edilen web sitesindeki verileri kazımak istiyorum .
Denedim:
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()
İşlevsiz de denedim ama şunu yazarsam hiçbir gerçek öğe döndürmez f?
:
Type: NoneType
String form: None
Docstring: <no docstring>
Örneğin, bir arama sorgusu gönderdikten sonra kitabın yazarının, başlığın veya diğer bilgilerin yazarının verilerinin nasıl ayrıştırılacağına dair her türlü yardıma açığız!
Yanıtlar
Bir F * ck Vermemenin İnce Sanatı gibi başlıkları ayıklamak ve ayırmak için WebDriverWait'i teşvik etmeniz gerekir visibility_of_element_located()
ve aşağıdaki Konum Belirleme Stratejilerinden birini kullanabilirsiniz :
Kullanarak
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"))
Kullanarak
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"))
Konsol Çıkışı:
The Subtle Art of Not Giving a F*ck
Not : Aşağıdaki içe aktarmaları eklemeniz gerekir:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC