Pythoni c способ получить текст из таблицы в Selenium? - PullRequest
1 голос
/ 04 февраля 2020

Я пытаюсь извлечь содержимое таблицы изнутри нашей системы ERP и сохранить ее в словаре.

Сложность заключается в том, что ячейки объединяются при повторяющихся значениях, таких как Part No, Description и Operation в скриншоте.

Мне бы очень хотелось узнать, как это сделать Python, все мои идеи приведут к королевской путанице в том, как это сделать.

Ожидаемым результатом будет список словарей с словарь для каждой строки / элемента в ведомости материалов. Например, элемент верхней строки будет выглядеть следующим образом, а остальные строки будут являться дополнительными записями в списке:

bom_data = [ 
        {'bom_component_data':{ 'Component Part/Item': 'WP106519 Rev.A'
                                , 'Component Name': 'Disk'
                                , 'Sub Components': 1
                                , 'Active': True
                                , 'Quantity': '1 pcs/pc'
                                , 'Operation': '75-Issue Material'
                                , 'Description': 'Disk'
                                , 'Part_No': 'Part_No_from_page'}
         }
         ]

Я смог определить элементы, представляющие интерес на странице, и покажу их в фрагмент кода ниже. Во-первых, это заголовки столбцов, обозначаемые тегом th:

print('Table column headers')
bom_table_headers = driver.find_elements_by_tag_name('th')
for bom_table_header in bom_table_headers:
    print(bom_table_header.text)

Возвращает:

<Table title> Rev.B Bill of Materials
Part No
Description
Operation
Quantity
Component Part/Item
Component Name
Sub Components
Active
Note

Я не хочу брать <Table title> Rev.B Bill of Materials, но остальные из них предметы, которые я хочу, как ключи в моем словаре.

В следующем фрагменте показаны заголовки строк таблицы, обозначенные tr:

print('Table row contents')
bom_table_contents = driver.find_elements_by_tag_name('tr')
for bom_table_content in bom_table_contents:
    print(bom_table_content.text)

Возвращает:

Table row contents
BackWikiAddUpload
WP106295 Rev.B Bill of Materials
Part No Description Operation Quantity Component Part/Item Component Name Sub Components Active Note
WP106295 Rev.B Disk 75-Issue Material 1 pcs/pc WP106519 Rev.A Disk 1
Disk 130-Turn OD, Front Face 0.166 each/pc WS100028-22-22-07 Box,Plywood,Slip-Over,22x22x7 per Standard Drawing WS100028
1 each/pc WS100039 Pad, Corrugated, Double wall, 21x21x.25, Plain 200
0.042 each/pc WS100021 Pallet,Reconditioned Wood,48 x 48 Runner Type,2-Way Entry, 3" Wing Style. Double runners in the center and 5/8 top boards.

И последний фрагмент показывает содержимое ячейки, Обозначается td:

print('Table cell contents')
table_row_items = driver.find_elements_by_tag_name('td')
for table_row_item in table_row_items:
    print(table_row_item.text)

Возвращает:

Table cell contents
BackWikiAddUpload

WP106295 Rev.B
Disk
75-Issue Material
1 pcs/pc
WP106519 Rev.A
Disk
1

Disk
130-Turn OD, Front Face
0.166 each/pc
WS100028-22-22-07
Box,Plywood,Slip-Over,22x22x7 per Standard Drawing WS100028

1 each/pc
WS100039
Pad, Corrugated, Double wall, 21x21x.25, Plain 200


0.042 each/pc
WS100021
Pallet,Reconditioned Wood,48 x 48 Runner Type,2-Way Entry, 3" Wing Style. Double runners in the center and 5/8 top boards.

Любая помощь или указатели приветствуются, спасибо.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...