Aqui está o código que eu estou usando para procurar amazônia a partir de minha tornado web app. No momento eu só tenho uma dessas classes (e um webdriver) instanciado. Eu quero uma piscina deles no futuro (sim, eu sei que há selenum grade, mas essa não é a minha pergunta.) A minha pergunta é, qual é a __init__ aparentemente não esteja funcionando? Por que há um attributeError para acessar o auto.fila de var, que é claramente definido no __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")))
Aqui está o erro:
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'