@Kryptonit

Как сделать ожидание между прогрузкой страницы и определением элемента selenium python?

В общем задача такая: я захожу на wolfram alpha, мультипроцессорно 4 раза, вбиваю инфу, нажимаю равно, жду, получаю значение из атрибута alt, однако после того как нажимается равно alt уже заполнен чем то по умолчанию, а код не ждёт этого и продолжает работать, (ну грубо говоря элемент то есть а alt ещё не заполнен), самое что интересно это происходит в 50% случаях, если поставить асинхронку, time.sleep() пробовал, но он не помог от слова совсем, наоборот результаты стали ещё реже отображаться, я думаю можно было бы сделать ожидание между загрузкой элемента и его заполнением, однако time.sleep не помог мне в этом:
from selenium import webdriver 
import openpyxl 
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.common.keys import Keys
from itertools import repeat
from multiprocessing import Pool
from multiprocessing import Manager, Process
import time 

WorkBook = openpyxl.load_workbook(r'C:\\MainBook-1.xlsm')
IntegralsSheet = WorkBook.get_sheet_by_name('Integrals')
CHROME_EXE_PATH = r'C:\\chromedriver.exe'
ArrayOfIntegrals = []
for i in range(1, 18, 5):
    Value = IntegralsSheet[f'A{i}'].value
    Value = str(Value)
    ArrayOfIntegrals.append(Value)
def get_data(Integral, ArrayOfResults):
    try:
        driver = webdriver.Chrome(executable_path=CHROME_EXE_PATH)
        driver.get('https://www.wolframalpha.com')
        search = driver.find_element_by_xpath('//*[@id="__next"]/div/div[1]/div/div/div[1]/section/form/div/div/input')
        button = driver.find_element_by_xpath('//*[@id="__next"]/div/div[1]/div/div/div[1]/section/form/span/button')
        search.send_keys(Integral)
        button.click()
        driver.implicitly_wait(40)
        result = driver.find_element_by_xpath('//*[@id="__next"]/div/div[1]/main/div[2]/div/div[2]/section/section[2]/div/div/img').get_attribute("alt")
        print(result)
        ArrayOfResults.append(result)
    except Exception as Ex:
        print(Ex)

if __name__ == '__main__':
    with Manager() as manager:
        ArrayOfResults = manager.list()
        p = Pool(processes=4)
        p.starmap(get_data, zip(ArrayOfIntegrals, repeat(ArrayOfResults)))
        print(ArrayOfResults)
там массив интегралов берётся из книги эксель, но это не важно думаю, отмечу, что там всё полностью работает
  • Вопрос задан
  • 55 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы