Я пишу скрипт, чтобы сделать несколько веб-сценариев на моей Firebase для нескольких избранных пользователей.Получив доступ к странице событий для пользователя, я хочу проверить условие, чтобы этот пользователь не регистрировал никаких событий.
Для этого я использую Selenium и Python.Использование XPath прекрасно работает для поиска ссылок и навигации во всех других частях скрипта, за исключением доступа к элементам в таблице.Сначала я подумал, что мог использовать неправильный Xpath, поэтому скопировал путь прямо из окна проверки Chrome - все равно не повезло.
В качестве альтернативы я попытался скопировать исходный код страницы и передать егов красивый суп, а затем разобрать его там, чтобы проверить элемент.Там тоже не повезло.
Вот часть кода и часть HTML, которую я пытаюсь разобрать.Куда я иду не так?
# USING WEBDRIVER - ALWAYS TRIGGERS EXCEPTION
def check_if_user_has_any_data():
try:
time.sleep(10)
element = WebDriverWait(driver, 10).until(EC.presence_of_all_elements_located((By.XPATH, '//*[@id="event-table"]/div/div/div[2]/mobile-table/md-whiteframe/div[1]/ga-no-data-table/div')))
print(type(element))
if element == True:
print("found empty state by copying xpath directly - bit risky, but it seems to have worked")
else:
print("did'nt find empty state")
except:
print("could not find the empty state element", EC)
# USING BEAUTIFULSOUP
def check_if_user_has_any_data#2():
time.sleep(10)
html = driver.execute_script("return document.documentElement.outerHTML")
soup = BeautifulSoup(html, 'html.parser')
print(soup.text[:500])
print(len(soup.findAll('div', {"class": "table-row-no-data ng-scope"})))
# HTML
<div class="table-row-no-data ng-scope" ng-if="::config" ng-class="{overlay: config.isBuilderOpen()}">
<div class="no-data-content layout-align-center-center layout-row" layout="row" layout-align="center center">
...
</div>
Первая версия вызывает исключение.Ожидается, что «элемент» будет оценен как True.Фактически, элемент не найден.
Вторая версия печатает первые 500 символов (насколько я могу судить правильно), но возвращает '0'.Ожидается, что после проверки источника страницы будет возвращено '1'.