【问题标题】:"for" loop does not continue (python)“for”循环不继续(python)
【发布时间】:2020-07-20 17:40:32
【问题描述】:

我需要问题帮助。 我的“for”循环没有继续。

我错过了这个循环还是我应该做些什么来继续这个循环? 该代码用于从网站中提取联系人。访问 url 后,代码将打开第二个窗口。我第一次设法从第二个窗口中提取代码,但“for”循环没有继续。我应该怎么做才能让这条领带继续下去?下面是代码:

class Extrator_olx:
    def __init__(self):
        chrome_options = Options()
        chrome_options.add_argument('--lang=pt-BR')
        chrome_options.add_argument('--disable-notifications')
        self.driver = webdriver.Chrome(executable_path=r'C:\Users\Daniel pc\Desktop\Tutorial chronDriver\chromedriver.exe', options=chrome_options)   
    
    def Iniciar(self):
        self.driver.get('https://mg.olx.com.br/regiao-de-juiz-de-fora/regiao-de-juiz-de-fora/autos-e-pecas/carros-vans-e-utilitarios')
        window_before = self.driver.window_handles[0]
        time.sleep(30)
       
        listado_pagina = self.driver.find_elements_by_xpath('//h2[@class="fnmrjs-10 deEIZJ"]')
        
        for lista_do_for in listado_pagina:
            self.driver.execute_script("arguments[0].click()", lista_do_for)
            self.driver.implicitly_wait(40)
            window_after = self.driver.window_handles[1]
            self.driver.switch_to_window(window_after)
            self.extrair_d_pg()
         
    def extrair_d_pg(self):      
        descricao_carro = self.driver.find_element_by_xpath('//h1[@class="sc-ifAKCX sc-1q2spfr-0 fxvTMe"]')
        preco_carro = self.driver.find_element_by_xpath('//h2[@class="sc-ifAKCX sc-1leoitd-0 buyYie"]')                
        vendedor_olx= self.driver.find_element_by_xpath('//span[@class="sc-ifAKCX sc-jhAzac sc-dYzWWc gcvYTZ sc-epGmkI hvWJHG"]')
        preco_carro_tx = preco_carro.text
        vendedor_olx_tx= vendedor_olx.text
        descricao_carro_tx = descricao_carro.text
        print(f'{descricao_carro_tx} | {preco_carro_tx} | {vendedor_olx_tx}')
        time.sleep(10)
        self.driver.close()        
        #print(preco_carro.text)
        #print(vendedor_olx.text)
        
    
curso =Extrator_olx()
curso.Iniciar()

【问题讨论】:

  • 您是否验证过listado_pagina中有任何内容?

标签: python selenium loops for-loop window


【解决方案1】:

你应该避免

time.sleep(x) 

尽可能! 在 Selenium 中,它会导致您出现一些错误。 相反,您应该使用“ExpectedConditions”,例如:presence_of_element_located(理想情况下按 ID)。

element = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, "myDynamicElement"))

您将需要这些库来运行此代码:

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

在这种情况下,它将等待 10 秒,直到找到您的元素,或者如果未找到该元素,则抛出“TimeoutException”。这是等待元素的一种更优化的方式。 您还应该避免通过 Javascript 进行点击,而是使用 Selenium 的“.click”方法。

您的变量命名不正确。 在这种情况下,“lista_do_for”并不精确。也许重命名为“elementOfPage”或类似的名称。

在您关闭页面并想要返回到原始页面后,您应该通过执行类似操作重新关注此页面:

self.driver.switch_to.window(self.driver.window_handles[0])

另外,我建议您阅读 python Selenium 文档以全面了解该框架及其工作原理:

https://selenium-python.readthedocs.io/index.html

它会在某些情况下拯救你。

希望对您有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多