Развернуть и извлечь текст

#python #selenium #drop-down-menu #tree #children

#python #селен #выпадающее меню #дерево #дочерние элементы

Вопрос:

Можно ли нажать все кнопки и извлечь текстовые значения с помощью Selenium (Python) отсюда коды литературных жанров на русском языке. Обратите внимание, параметры должны быть расширены вплоть до нижней части (есть несколько уровней)?

Комментарии:

1. Ваши испытания кода?

Ответ №1:

Это займет много времени, поэтому приготовьте чай или посмотрите эпизод вашего любимого шоу netflix ^^ но это должно сработать:

 from selenium import webdriver
import time

d = webdriver.Firefox(executable_path="PATH TO GECKODRIVER")
d.get("http://bbk.rsl.ru/external/bbk?block=ETALON")
time.sleep(1)

# Function to find all new collapsed subnodes after opening a node
def search_sub_nodes(found_elements):
    sub_elements = d.find_elements_by_class_name("tree_node_status_collapsed")
    for sub_element in sub_elements:
        if sub_element not in found_elements:
            sub_element.click()
            found_elements.append(sub_element)
#            time.sleep(0.3) # if needed use time.sleep to ensure loading
            search_sub_nodes(sub_elements.copy())

# Main Function to open all nodes, calls search_sub_nodes to open child nodes
def open_all_tree_nodes():
    elements = d.find_elements_by_class_name("tree_node_status_collapsed")
    for element in elements:
        element.click()
#        time.sleep(0.3) # if needed use time.sleep to ensure loading
        search_sub_nodes(elements.copy())

open_all_tree_nodes()
# open_all_tree_nodes() # add second run just to be sure all nodes are opened

titles = []
# Find all tr elements under class 'node_own_area' (those contain the title)
elements = d.find_elements_by_css_selector(".node_own_area tr")
for element in elements:
    # get the title property and add it to titles list
    titles.append(str(element.get_property("title")))

# print(titles) debug
# write titles to txt file
with open("title_file.txt", "w") as f:
    f.writelines(titles)
 

Вероятно, это можно немного упростить, но я не профессионал в python ^^