首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Selenium,python动态表

Selenium,python动态表
EN

Stack Overflow用户
提问于 2018-07-11 05:16:11
回答 2查看 2.5K关注 0票数 -1

我正在创建一个带有硒的机器人,它可以从巴西的机构获得所有信息,我已经完成了所有州和县之间的排列点击,现在我所要做的就是在所有机构中点击并获得信息,比如:"telefone","endereço",“HORáRIO DE ATENDIMENTO”。我该怎么做呢??这是我到现在为止的代码:

代码语言:javascript
复制
 # -*- 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'))

这是我的输出:

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-11 05:23:22

试试这个xPath:

代码语言:javascript
复制
//table[@class = 'dadosAgencia']//tr

应该是这样的:

代码语言:javascript
复制
elements = WebDriverWait(driver, 10).until(EC.presence_of_all_elements_located(
            (By.XPATH, "//table[@class = 'dadosAgencia']//tr")))

它为您提供了定位的所有元素的列表。要打印每个元素的文本,可以使用以下命令:

代码语言:javascript
复制
for element in elements:
    print(element.text)

注意:您必须添加一些导入:

代码语言:javascript
复制
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
票数 1
EN

Stack Overflow用户

发布于 2018-07-11 12:51:50

对该表尝试此XPath:

代码语言:javascript
复制
//table[@class = 'dadosAgencia']

首先,查找表元素:

代码语言:javascript
复制
table_elements = WebDriverWait(driver, 10).until(EC.presence_of_all_elements_located(
        (By.XPATH, "//table[@class = 'dadosAgencia']")))

迭代表:

代码语言:javascript
复制
for table_element in table_elements:
    for row in table_element.find_elements_by_xpath(".//tr"):
        print(row.text)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51273995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档