#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 ^^