Heres algunas código asincrónico para proporcionar una cola de amazon búsquedas con selenio, ¿por qué estoy recibiendo AttributeError? El __init__ no se está ejecutando?

0

Pregunta

Aquí es el código que estoy utilizando para la búsqueda de amazon de mi tornado web app. Por el momento sólo tengo una de estas clases (y uno webdriver) crea una instancia. Puede que desee un grupo de ellos en el futuro (sí, sé que hay selenum de la cuadrícula, pero esa no es mi pregunta.) Mi pregunta es, ¿por qué es el __init__, al parecer, no se ejecuta? ¿Por qué hay un attributeError para acceder al mismo.cola de var, que está claramente definido en el __init__?

import asyncio
import uuid
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support.expected_conditions import presence_of_element_located
from selenium.common.exceptions import NoSuchElementException


class Searcher:
    def __init___(self):
        self.driver = webdriver.Firefox(executable_path="/home/felix/project/geckodriver")
        self.wait = WebDriverWait(self.driver, 10)
        self.driver.get("https://amazon.com/")
        self.queue = []

    async def _search(self, query):
        self.driver.find_element(By.ID, "twotabsearchtextbox").send_keys("pixel" + Keys.RETURN)
        self.wait.until(presence_of_element_located((By.XPATH,
                "//div[contains(@class, 'sg-col-inner')]/div[contains(@class, 'a-section')]"
                "/div[contains(@class, 'a-section')]")))
        el = self.driver.find_elements(By.XPATH,
                "//div[contains(@class, 'a-section')]/div[h2][not(contains(.,'Sponsored'))]"
                "[contains(@class, 'a-section')]/..")
        out=[]
        for e in range(len(el)):
            try:
                out+=[{"price": el[e].find_element(By.XPATH, ".//span[contains(@class, 'a-price-whole')]").text + "." +
                el[e].find_element(By.XPATH, ".//span[contains(@class, 'a-price-fraction')]").text,
                "title": el[e].find_element(By.XPATH, ".//h2").text}]
            except NoSuchElementException:
                pass
        return out

    def search(self, query):
        _id = uuid.uuid4()
        self.queue.append(_id)
        async def help(self):
            while 1:
                if _id == self.queue[0]:
                    return await self._search(query)
                await asyncio.sleep(0.5)
        res = help(self)
        self.queue.pop()
        return res

a = Searcher()
print(asyncio.run(a.search("test")))

Aquí está el error:

Traceback (most recent call last):
  File "/home/felix/project/search.py", line 49, in <module>
    print(asyncio.run(a.search("test")))
  File "/home/felix/project/search.py", line 38, in search
    self.queue.append(_id)
AttributeError: 'Searcher' object has no attribute 'queue'
attributeerror class init python
2021-11-24 06:01:11
1

Mejor respuesta

0

Cómo rediciulous... me había llamado el __init__ función __init___.

He corregido otros errores refactorizado y aquí está el código de trabajo

import asyncio
import uuid
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support.expected_conditions import presence_of_element_located
from selenium.common.exceptions import NoSuchElementException


class Searcher:
    def __init__(self):
        self.driver = webdriver.Firefox(executable_path="/home/felix/amcoin/geckodriver")
        self.wait = WebDriverWait(self.driver, 10)
        self.driver.get("https://amazon.com/")
        self.queue = []

    async def _search(self, query):
        self.driver.find_element(By.ID, "twotabsearchtextbox").send_keys(query + Keys.RETURN)
        self.wait.until(presence_of_element_located((By.XPATH,
                "//div[contains(@class, 'sg-col-inner')]/div[contains(@class, 'a-section')]"
                "/div[contains(@class, 'a-section')]")))
        el = self.driver.find_elements(By.XPATH,
                "//div[contains(@class, 'a-section')]/div[h2][not(contains(.,'Sponsored'))]"
                "[contains(@class, 'a-section')]/..")
        out=[]
        for e in range(len(el)):
            try:
                out+=[{"price": el[e].find_element(By.XPATH, ".//span[contains(@class, 'a-price-whole')]").text + "." +
                el[e].find_element(By.XPATH, ".//span[contains(@class, 'a-price-fraction')]").text,
                "title": el[e].find_element(By.XPATH, ".//h2").text}]
            except NoSuchElementException:
                pass
        return out

    async def search(self, query):
        _id = uuid.uuid4()
        self.queue.append(_id)
        while 1:
            if _id == self.queue[0]:
                res = await self._search(query)
                self.queue.pop()
                return res
            await asyncio.sleep(0.5)

a = Searcher()
print(asyncio.run(a.search("test")))
2021-11-24 06:21:16

En otros idiomas

Esta página está en otros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Slovenský
..................................................................................................................