Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 无法使用Selenium在网站中获取表元素_Python_Python 3.x_Selenium_Web Scraping - Fatal编程技术网

Python 无法使用Selenium在网站中获取表元素

Python 无法使用Selenium在网站中获取表元素,python,python-3.x,selenium,web-scraping,Python,Python 3.x,Selenium,Web Scraping,下面的网站有几个表,但我的代码无法获得一个特定的表(或任何其他表) 该代码旨在从“Aões em Circulaçço no Mercado”表中获取数据,该表是网页中最后一个表之一 我尝试了下面的代码和一些替代方案,但没有一个对我有效: import pandas as pd from selenium import webdriver from time import sleep url = "http://bvmf.bmfbovespa.com.br/cias-Listadas/Empr

下面的网站有几个表,但我的代码无法获得一个特定的表(或任何其他表)

该代码旨在从“Aões em Circulaçço no Mercado”表中获取数据,该表是网页中最后一个表之一

我尝试了下面的代码和一些替代方案,但没有一个对我有效:

import pandas as pd
from selenium import webdriver
from time import sleep

url = "http://bvmf.bmfbovespa.com.br/cias-Listadas/Empresas-Listadas/BuscaEmpresaListada.aspx?idioma=pt-br"
Ticker='ITUB4'
browser = webdriver.Chrome()
browser.get(url)
sleep(2) #Wait webpage to load
browser.find_element_by_xpath(('//*[@id="ctl00_contentPlaceHolderConteudo_BuscaNomeEmpresa1_txtNomeEmpresa_txtNomeEmpresa_text"]')).send_keys(Ticker)
browser.find_element_by_xpath(('//*[@id="ctl00_contentPlaceHolderConteudo_BuscaNomeEmpresa1_btnBuscar"]')).click();
sleep(2) #Wait webpage to load
browser.find_element_by_xpath(('//*[@id="ctl00_contentPlaceHolderConteudo_BuscaNomeEmpresa1_grdEmpresa_ctl01"]/tbody/tr/td[1]/a')).click();
sleep(5) #Wait webpage to load

#This is not working
content = browser.find_element_by_css_selector('//div[@id="div1"]')

#This is not working as well
#browser.find_element_by_xpath('//*[@id="div1"]/div/div/div[1]/table/tbody/tr[1]/td[1]').text
可在此处找到表格和完整的HTML:

HTML是:

<div id="div1">
                <div>
                    <h3>Ações em Circulação no Mercado</h3>
                    <div class="table-wrapper"><div class="scrollable"><table class="responsive">

                        <thead>
                            <tr>
                                <th colspan="3" class="text-center">19/04/2017</th>
                            </tr>
                            <tr>
                                <td>Tipos de Investidores / Ações</td>
                                <td class="text-center">Quantidade</td>
                                <td class="text-center">Percentual</td>
                            </tr>
                        </thead>

                            <tbody><tr>
                                <td>Pessoas Físicas</td>
                                <td class="text-right">108.853</td>
                                <td class="text-right"> - </td>
                            </tr>

                            <tr>
                                <td>Pessoas Jurídicas</td>
                                <td class="text-right">11.591</td>
                                <td class="text-right"> - </td>
                            </tr>

                            <tr>
                                <td>Investidores Institucionais</td>
                                <td class="text-right">1.039</td>
                                <td class="text-right"> - </td>
                            </tr>

                            <tr>
                                <td>Quantidade de Ações Ordinárias</td>
                                <td class="text-right">272.710.309</td>
                                <td class="text-right">8,21</td>
                            </tr>

                            <tr>
                                <td>Quantidade de Ações Preferenciais</td>
                                <td class="text-right">3.141.058.175</td>
                                <td class="text-right">97,23</td>
                            </tr>

                            <tr>
                                <td>Total de Ações</td>
                                <td class="text-right">3.413.768.484</td>
                                <td class="text-right">52,11</td>
                            </tr>

                            </tbody></table></div><div class="pinned"></div></div>
                </div>
                </div>

Ações em Circulaçção no Mercado
19/04/2017
投资信托基金/Ações
量子化
百分比
佩索阿斯·费西卡斯
108.853
- 
朱里迪卡斯佩索亚斯酒店
11.591
- 
投资研究所
1.039
- 
Ordinárias数量
272.710.309
8,21
优先数量
3.141.058.175
97,23
总费用
3.413.768.484
52,11

您在CSS选择器定义中编写了XPATH。你应该找到
tables=browser。通过css选择器('.responsive')查找元素。
如果需要所有表,则从中进行解析。或
使用
浏览器。通过xpath(.//*[@id='div1']/div/table)
查找\u元素\u来定位精确的表。

您在CSS选择器定义中编写了xpath。你应该找到
tables=browser。通过css选择器('.responsive')查找元素。
如果需要所有表,则从中进行解析。或
使用
浏览器。通过xpath(./*[@id='div1']/div/table)查找元素。
可以进行的一个快速更正是更改此
content=browser。通过css选择器('//div[@id=“div1”]”)查找元素。
content=browser。通过xpath('//div[@id=“div1”]”查找元素
因为它实际上是您正在使用的xpath

第二次尝试不起作用的原因可能是div1元素没有滚动到视图中。硒与不可见的元素不能很好地相互作用。所以试试这个:

element = browser.find_element_by_xpath('//*[@id="div1"]')
# Force the element to be scrolled into view, even if you don't need its location.
location = element.location_once_scrolled_into_view
# Now Selenium can get its text.
text = element.text

您可以做的一个快速更正是将此
content=browser.find_element_通过_css_选择器('//div[@id=“div1”]')
更改为
content=browser.find_element_通过xpath('//div[@id=“div1”]')
,因为它实际上是您正在使用的xpath

第二次尝试不起作用的原因可能是div1元素没有滚动到视图中。硒与不可见的元素不能很好地相互作用。所以试试这个:

element = browser.find_element_by_xpath('//*[@id="div1"]')
# Force the element to be scrolled into view, even if you don't need its location.
location = element.location_once_scrolled_into_view
# Now Selenium can get its text.
text = element.text
要定位WebElement并提取文本,可以使用以下代码行:

content = driver.find_element_by_xpath("//h3[.,'Ações em Circulação no Mercado']//following::div[1]//table[@class='responsive']//tr//following-sibling::td[1]").get_attribute("innerHTML")

更新(无代码更改)
xpath
表达式:

//h3[.,'Ações em Circulação no Mercado']//following::div[1]//table[@class='responsive']//tr//following-sibling::td[1]
不应在单引号内,例如
'xpath\u here'
。将带有的xpression放在双引号中,例如
“xpath\u here”

请参见工作快照:

要定位WebElement并提取文本,可以使用以下代码行:

content = driver.find_element_by_xpath("//h3[.,'Ações em Circulação no Mercado']//following::div[1]//table[@class='responsive']//tr//following-sibling::td[1]").get_attribute("innerHTML")

更新(无代码更改)
xpath
表达式:

//h3[.,'Ações em Circulação no Mercado']//following::div[1]//table[@class='responsive']//tr//following-sibling::td[1]
不应在单引号内,例如
'xpath\u here'
。将带有的xpression放在双引号中,例如
“xpath\u here”

请参见工作快照:


BTW,通过XPATH定位元素的正确方法如下:
browser.find_element_by_XPATH(//div[@id='div1']//table[@class='responsive'])
Tks。您的解决方案在您的公司中有效吗?找到所有表的第一个代码给了我一个空变量,而您的注释中的解决方案给了我错误消息:NoSuchElementException:没有这样的元素:无法找到元素:{“method”:“xpath”,“selector”:”//div[@id='div1']//table[@class='responsive']}Tks!顺便说一句,通过XPATH定位元素的正确方法如下:
browser.find_element\u by_XPATH(//div[@id='div1']//table[@class='responsive'])
Tks。您的解决方案在您的公司中有效吗?找到所有表的第一个代码给了我一个空变量,而您的注释中的解决方案给了我错误消息:NoSuchElementException:没有这样的元素:无法找到元素:{“method”:“xpath”,“selector”:”//div[@id='div1']//table[@class='responsive']}Tks!Tks@Ron Norris。不过,这两种解决方案都不起作用。这两种情况下的错误消息是:NoSuchElementException:没有这样的元素:无法定位元素:{“方法”:“xpath”,“选择器”:“/*[@id=“div1”]”}您对滚动视图的评论非常有趣。可能是因为同一页中有两个卷轴。我会寻找更多关于这个的信息。Tks!Tks@Ron Norris。不过,这两种解决方案都不起作用。这两种情况下的错误消息是:NoTouchElementException:没有这样的元素:无法定位元素:{“方法”:“xpath”,“选择器”:“/*[@id=“div1”]”}您对scr的评论非常有趣