Selenium Finder дает неправильные ответы - PullRequest
0 голосов
/ 04 мая 2020

Я пытаюсь получить доступ к сайту http://www.academia.org.br/print/nossa-lingua/busca-no-vocabulario, который содержит информацию, которую рассматривает ABL (португальский язык: Academia Brasileira de Letras, Engli sh: Бразильская академия букв), и Selenium дает мне головная боль, потому что всегда есть точка, которая нуждается в исправлении. Он проверяет, есть ли он на сайте ABL или нет, и это были мои ответы в том порядке, в котором я их сделал:

"Батата": Верно (верно)

"Искейро" Правда (это верно)

"Батата" Ложь (ЧТО ПРОИСХОДИТ!?)

"Искейро" Правда

"Батата" Ложь

И ответ варьируется, но я не знаю причину, я сделал таймер (он все еще в коде), но он не работал! Поэтому я спрашиваю, есть ли у кого-нибудь представление о причине, по которой он не работает. Я перевел комментарии, но не переменные, надеюсь, это все еще понятно.

Код 1:

from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.common.exceptions import NoSuchElementException
from selenium.common.exceptions import StaleElementReferenceException


def iniciar():
    """open the browser and accesses the ABL's page"""

    global browser

    options = Options()
    prefs = {"profile.managed_default_content_settings.images": 2}
    options.add_experimental_option("prefs", prefs)
    options.add_argument("--headless")  # Make the browser invisible
    chrome_driver = "D:\programatio\PycharmProjects\pesquisador_de_palavras_no_vocabulario_da_abl\chromedriver_win32\chromedriver.exe"
    browser = webdriver.Chrome(executable_path=chrome_driver, chrome_options=options)
    browser.implicitly_wait(10)
    browser.get("http://www.academia.org.br/print/nossa-lingua/busca-no-vocabulario")


def pesquisar(x: str) -> bool:
    """It is checked if the X variable is on the ABL's vocabulary"""

    # Search and on it writes the variable X
    findinput = browser.find_element_by_tag_name("input")  # Search INTPUT
    findinput.clear()
    findinput.send_keys(x)  # Writes the 'x' variable

    # Search the button to press it
    findbtn = browser.find_element_by_css_selector("button.btn.btn-primary")  # Search the button
    findbtn.click()  # Click on it

    # Search all the answers given by the site
    WebDriverWait(browser, 10)
    while True:
        d = 0
        try:
            findpalavra = browser.find_elements_by_class_name("item-palavra")
        except NoSuchElementException:
            return False
        except StaleElementReferenceException:
            return False

        # checks if on of the variables is equal to the 'x' variable and solves the "StaleElementReferenceException" error
        if not findpalavra:  # If not had been found
            return False

        try:
            for d in range(0, len(findpalavra)):
                if findpalavra[d].text == x:
                    return True
                elif d == len(findpalavra) - 1:
                    return False
        except StaleElementReferenceException:
            pass

def sair():
    """The PESQUISADOR is closed"""

    browser.quit()

Код 2:


Pesquisador.iniciar()

a = ["batata", "isqueiro", "batata", "isqueiro", "batata"]

for c in range(0, len(a)):
    print(Pesquisador.pesquisar(a[c]))

Кстати извините, если я сделал какую-то орфографическую ошибку или если она не стала понятной. Это не мой родной язык (держу пари, это не первый раз, когда ты это слышал!).

...