Я написал свой первый сценарий Selenium, чтобы практиковать webscraping в Python. Идея состоит в том, чтобы очистить все рабочие книги, представления и избранное из профиля Tableau Publi c. Мне удалось извлечь эти три ключевые переменные, но я не знаю, как назначить избранное для их соответствующих рабочих книг, поскольку не во всех рабочих книгах есть хотя бы один любимый.
Например, у «Скайлер на Бродвее» нет избранных, но если бы я совпал с книгами и избранными в словаре, он выбрал бы следующее лучшее значение, а именно 4.
f.text! = "" удаляет только пустые значения в конце списка.
Как лучше всего подойти к этой проблеме?
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
import time
driver = webdriver.Chrome(executable_path=r',mypath')
driver.get("https://public.tableau.com/profile/skybjohnson#!/")
#load entire website:
while True:
try:
show_more = WebDriverWait(driver, 5).until(EC.element_to_be_clickable((By.ID, "load-more-vizzes")))
driver.find_element_by_id("load-more-vizzes")
driver.execute_script("window.scrollTo(0,document.body.scrollHeight)")
WebDriverWait(driver, 5).until(EC.visibility_of_element_located((By.ID, "load-more-vizzes")))
except Exception as e:
print(e)
break
#get workbook titles
titles = driver.find_elements_by_class_name("workbook-title")
workbook_titles = [i.text for i in titles if i.text != ""]
print(workbook_titles)
#get number of views per workbook
views = driver.find_elements_by_class_name('workbook-view-count')
workbook_views = [int(v.text.split()[0]) for v in views if v.text != ""]
print(workbook_views)
#get number of favourites per workbook
favs = driver.find_elements_by_xpath('//SPAN[@ng-bind="controller.workbook.numberOfFavorites"]')
workbook_favs = [f.text for f in favs if f.text != ""]
print(workbook_favs)