Python Selenium无法通过xpath查找表元素

时间:2017-07-07 16:55:32

标签: python selenium xpath

这是表格在网页上的样子(它只是一列):

Here is what the table looks like on the web page

以下是我试图抓取的表格的HTML:

Here is the HTML of the table I am trying to scrape

如果重要,该表嵌套在另一个表中。

这是我的代码:

    def filter_changed_records():
        # Scrape webpage for addresses from table of changed properties
        row_number = 0
        results_frame = locate_element(
            '//*[@id="oGridFrame"]'
        )
        driver.switch_to.frame(results_frame)
        while True:
            try:
                address = locate_element("id('row" + str(row_number) +
                                         "FC')/x:td")
                print(address)
                changed_addresses.append(address)
                row_number += 1
            except:
                print("No more addresses to add.")
                break

如您所见,有一个<tr>标记,其ID为row0FC。这个表是动态生成的,每个新的<tr>都会获得一个数字越来越大的id:row0FC, row1FC, row2FC等。这就是我计划迭代所有条目并将它们添加到列表中的方式。

我的locate_element函数如下:

    def locate_element(path):
        element = WebDriverWait(driver, 50).until(
            EC.presence_of_element_located((By.XPATH, path)))
        return element

在找不到元素后50秒后总是超时。不确定如何进行。有没有更好的方法来定位元素?

ANDERSSON解决方案

address = locate_element("//tr[@id='row%sFC']/td" % row_number).text

2 个答案:

答案 0 :(得分:0)

您的XPath似乎不正确。

尝试以下:

address = locate_element("//tr[@id='row%sFC']/td" % row_number)

另请注意,addressWebElement。如果要获取其文本内容,则应使用

address = locate_element("//tr[@id='row%sFC']/td" % row_number).text

答案 1 :(得分:-1)

用硒解析html很慢。我会使用BeautifulSoup。

假设您已在驱动程序中加载页面,它将类似于:

from bs4 import BeautifulSoup
....

soup = BeautifulSoup(driver.page_source, "html.parser")
td_list = soup.findAll('td')
for td in td_list:
    try:
        addr = td['title']
        print(addr)
    except:
        pass