我的问题与此帖子有关:在搜索栏中输入查询并抓取结果
我能够执行针对前一个问题的答案,但是无法通过循环浏览从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
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句