Селен, динамическая таблица Python

Селен, динамическая таблица Python

Я создаю робота с селеном, который получает всю информацию от агентств в Бразилии, я уже сделал щелчок перестановки между всеми штатами и округами, все, что мне нужно сделать, теперь щелкнуть во всех агентствах и получить информацию вроде: «телефон», "endereço", "HORÁRIO DE ATENDIMENTO". Как мне это сделать?? Это мой код до сих пор:

 # -*- coding: UTF-8 -*-
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support.select import Select
import time     
import urllib
import urllib.request
from bs4 import BeautifulSoup
import request


def make_soup(url):
    thepage = urllib.request.urlopen(url)
    soupdata = BeautifulSoup(thepage,'html.parser')
    return soupdata

chrome_path = r"D:\Users\gbenites\Desktop\Inovação\arquivos py\WebDriver\chromedriver.exe"
url = 'http://www2.correios.com.br/sistemas/agencias/'
driver = webdriver.Chrome(chrome_path)
driver.get("http://www2.correios.com.br/sistemas/agencias/")
#WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.ID, 'municipioAgencia')))
driver.maximize_window()


time.sleep(3) 
estadoList = Select(driver.find_element_by_name('estadoAgencia'))
for index in range(3,len(estadoList.options)):
    select = Select(driver.find_element_by_name('estadoAgencia'))
    print("selecting Estado: ",select.options[index].text)    
    print("selecting Index: ",index)    
    select.select_by_index(index)
    time.sleep(2)
    municípioList = Select(driver.find_element_by_name('municipioAgencia'))
    for index_b in range(1,len(municípioList.options)):
        select_b = Select(driver.find_element_by_name('municipioAgencia'))
        print("...selecting Municipio",select_b.options[index_b].text.replace("'",""))
        print("...selecting Municipio Index: ",index_b)
        select_b.select_by_index(index_b)
        time.sleep(3)
        get_info_list =  WebDriverWait(driver, 10).until(EC.presence_of_all_elements_located((By.XPATH, "//table[@class = 'dadosAgencia']//td")))
        info_list = driver.find_elements_by_xpath("//table[@class = 'dadosAgencia']//span")
        print(range(len(info_list)))
        for record in range(0,len(info_list)):
            print(record.get_attribute('innerText'))

И вот мой результат:

selecting Estado:  AMAPÁ
selecting Index:  3
...selecting Municipio AMAPA
...selecting Municipio Index:  1
range(0, 27)
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

Пожалуйста, не связывайте только изображение. Отредактируйте свой вопрос и напишите в тексте, что вы хотите.

Andrej Kesely 10.07.2018 23:18

Прочтите, почему возникает ошибка скриншот HTML, кода или ошибки - плохая идея. Рассмотрите возможность обновления вопроса, добавив в него соответствующий HTML-код на основе форматированного текста, испытания кода и трассировку стека ошибок.

DebanjanB 11.07.2018 10:10

Извините ребята. Это сделано

Gustavo Molina 11.07.2018 14:16
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
3
2 276
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Попробуйте этот xPath:

//table[@class = 'dadosAgencia']//tr

Это было бы так:

elements = WebDriverWait(driver, 10).until(EC.presence_of_all_elements_located(
            (By.XPATH, "//table[@class = 'dadosAgencia']//tr")))

он дает вам список всех обнаруженных элементов. Чтобы распечатать текст каждого элемента, вы можете использовать это:

for element in elements:
    print(element.text)

Примечание: вам нужно добавить импорт:

from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait

это касается только деталейAgencia 1, а не всех деталейAgencia [i]

Gustavo Molina 10.07.2018 23:31

Попробуйте этот XPath для таблицы:

//table[@class = 'dadosAgencia']

Сначала найдите элементы таблицы:

table_elements = WebDriverWait(driver, 10).until(EC.presence_of_all_elements_located(
        (By.XPATH, "//table[@class = 'dadosAgencia']")))

Перебрать таблицу:

for table_element in table_elements:
    for row in table_element.find_elements_by_xpath(".//tr"):
        print(row.text)

Другие вопросы по теме