Selenium Python: как подождать, пока элемент не закончит изменение текста, прежде чем читать значение с помощью? - PullRequest
0 голосов
/ 15 февраля 2019

Я пытаюсь прочитать значение текста со страницы, используя Selenium Python.Элемент всегда видим, затем становится невидимым, а затем становится видимым, и текстовое значение быстро изменяется, пока не достигнет конечного значения.Я думаю, что он использует некоторую форму javascript для получения значения перед отображением окончательного значения.

Страница - https://www.junglescout.com/estimator/

Я пытаюсь получить результат оценки из элементаjs-magic-result.

Я могу использовать Selenium для заполнения трех форм и нажать кнопку «рассчитать продажи»

Я использую хромированный драйвер в python selenium, чтобы прочитать значение.

все тесты дают мне одно из промежуточных значений перед завершением загрузки.

Я попытался использовать фоллинг вместо browser2.implicitly_wait (5):

driver.implicitly_wait(5)
wait = WebDriverWait(browser2,3)
wait.until(EC.invisibility_of_element_located((By.CLASS_NAME,'js-magic-result')))
wait.until(EC.visibility_of_element_located((By.CLASS_NAME,'js-magic-result')))

Вот полный код, который я использую

browser2 = webdriver.Chrome(options=options,executable_path=driverPath)
url = 'https://www.junglescout.com/estimator/'
browser2.get(url)

container = browser2.find_element_by_class_name('js-estimation-section')
rankField = container.find_element_by_name('theRankInput')
rankField.send_keys('345')

# Click for storesList drop down
storeGroup = container.find_element_by_class_name('js-est-stores-list-input')
storeGroup.find_element_by_class_name('x-icon-caret-down').click()

# Get Stores List items
wait = WebDriverWait(browser2,3)
stores = wait.until(EC.visibility_of_element_located((By.CLASS_NAME,'js-est-stores-list')))
stores.find_elements_by_tag_name('span')[0].click()

# Wait for storesList is invisible
wait.until(EC.invisibility_of_element_located((By.CLASS_NAME,'js-est-stores-list')))

# Click for Categories list drop down
catGroup = container.find_element_by_class_name('js-est-categories-list-input')
catGroup.find_element_by_tag_name('input').click()

# Get Categories List items
cats = wait.until(EC.visibility_of_element_located((By.CLASS_NAME,'js-est-categories-list')))

# Get Categories List items
for cat in cats.find_elements_by_class_name('us-available'):
    if (cat.find_element_by_tag_name('span').text == 'Electronics'):
        cat.click()
        break
# Wait for storesList is invisible
wait.until(EC.invisibility_of_element_located((By.CLASS_NAME,'js-est-categories-list')))

# wait5 = WebDriverWait(browser2,3)
submit = wait.until(EC.visibility_of_element_located((By.CLASS_NAME,'js-est-btn')))
submit.click()

browser2.implicitly_wait(5)
print(container.find_element_by_class_name('js-magic-result').text)

Я ожидаю получить окончательное возвращаемое значение, но получаю одно из промежуточных значений элемента.

1 Ответ

0 голосов
/ 15 февраля 2019

Вместо

print(container.find_element_by_class_name('js-magic-result').text)

Пожалуйста, попробуйте это.

print(browser2.find_element_by_xpath("//table[@class='js-estimation-section']//tbody//tr/td[2]/p").text)

Убедитесь, что перед печатью должна быть задержка, поэтому замените только код печати. ​​

Пустья знаю, если это работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...