Selenium Python:在使用读取值之前,如何等待元素完成文本的更改?

时间:2019-02-14 22:05:36

标签: python selenium selenium-chromedriver

我正在尝试使用Selenium Python从页面读取文本的值。元素始终是可见的,然后变为不可见,然后变为可见,并且文本值快速变化,直到达到最终值。我认为它正在使用某种形式的javascript在显示最终值之前获取值。

页面为https://www.junglescout.com/estimator/

我正在尝试从元素js-magic-result中获得估算结果。

我可以使用Selenium填写这三个表格,然后单击“计算销售额”按钮

我正在python硒中使用chromedriver读取值。

所有测试在加载完成之前为我提供了中间值之一。

我尝试使用浏览器的替代方式2.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 :(得分:1)

代替

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)

确保在打印之前应该有一些延迟,所以请仅替换打印代码。

让我知道是否可行。