2017-08-06 20 views
1

我已经写了一些脚本在python中使用硒从redmart网站上刮取不同产品的名称和价格。我的目标是点击主页面上方的10个分类中的所有分类,并解析所有产品到目标页面。但是,当点击某个类别时,浏览器会处于新打开的页面中,因此此时需要再次到达主页面以点击10个类别链接中的另一个。我的刮板点击一个链接,进入其目标页面,从那里解析数据,返回到主页面并点击相同的链接,并一遍又一遍地重复其他的链接。这是我与尝试脚本:刮刀单击相同的链接循环?

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

driver = webdriver.Chrome() 
driver.get("https://redmart.com/bakery") 
wait = WebDriverWait(driver, 10) 

while True: 
    try: 
     wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "li.image-facets-pill"))) 
     driver.find_element_by_css_selector('img.image-facets-pill-image').click()   
    except: 
     break 

    for elems in wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, "li.productPreview"))): 
     name = elems.find_element_by_css_selector('h4[title] a').text 
     price = elems.find_element_by_css_selector('span[class^="ProductPrice__"]').text 
     print(name, price) 

    driver.back() 

driver.quit() 

顺便说一句,我认为有必要调补脚本中的“try”和“除外”块以获得所需的输出。

+0

的可能的复制[处理在Python多窗口(https://stackoverflow.com/questions/10629815/handle-multiple-window-in-python) – demouser123

+0

'driver.back()'不工作吗? – ksai

+0

是的,“driver.back()”正在工作,但我的循环有问题,所以它再次点击相同的链接,等等。 – SIM

回答

1

您可以实现简单的计数器,让您可以通过如下类别列表迭代:

counter = 0 

while True: 

    try: 
     wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "li.image-facets-pill"))) 
     driver.find_elements_by_css_selector('img.image-facets-pill-image')[counter].click()  
     counter += 1  
    except IndexError: 
     break 

    for elems in wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, "li.productPreview"))): 
     name = elems.find_element_by_css_selector('h4[title] a').text 
     price = elems.find_element_by_css_selector('span[class^="ProductPrice__"]').text 
     print(name, price) 

    driver.back() 

driver.quit() 
+0

你再次用魔法代码先生安德森做了诡计。我从来不知道硒也支持索引。然而,应用你的脚本,我发现它像魅力一样工作。再次感谢先生。 – SIM