Làm cách nào để phân tích cú pháp kết quả tìm kiếm từ trang web sau khi sử dụng send_keys (Python) trong thanh tìm kiếm?

Jan 05 2021

Câu hỏi của tôi có liên quan đến bài đăng này: Nhập truy vấn vào thanh tìm kiếm và chọn kết quả

Tôi có thể thực hiện câu trả lời cho câu hỏi cũ này, nhưng không thể lấy dữ liệu từ trang web mà Chrome điều hướng đến bằng cách lặp lại book. Tôi chỉ tìm thấy câu trả lời sẽ hiển thị cách loại bỏ dữ liệu từ dmã của tôi, chứ không phải từ kết quả tìm kiếm sau khi đã sử dụng send_keys.

Tôi đã cố gắng truy cập phần tử nhưng không thể làm như vậy và tôi muốn loại bỏ dữ liệu từ trang web kết quả sau khi tìm kiếm bookvà sau đó chuyển sang vòng tiếp theo của vòng lặp.

Tôi đã thử:

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))

Tôi cũng đã thử mà không có print()hàm nhưng nó không trả về phần tử thực nào nếu tôi nhập, f?tôi nhận được:

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

Rất hoan nghênh mọi trợ giúp về cách phân tích cú pháp dữ liệu, ví dụ như tác giả của cuốn sách, tên sách hoặc thông tin khác sau khi gửi truy vấn tìm kiếm!

Trả lời

DebanjanB Jan 05 2021 at 22:26

Để trích xuất và đặt tiêu đề sách, tức là Nghệ thuật tinh tế của việc không đưa ra F * ck, bạn cần tạo ra WebDriverWait cho visibility_of_element_located()và bạn có thể sử dụng một trong các Chiến lược định vị sau:

  • Sử dụng 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"))
    
  • Sử dụng 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"))
    
  • Đầu ra bảng điều khiển:

    The Subtle Art of Not Giving a F*ck
    
  • Lưu ý : Bạn phải thêm các lần nhập sau:

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