使用selenium但不使用xpath在表的同一行中刮取相关元素

时间:2017-09-21 22:01:08

标签: python-3.x selenium xpath phantomjs

我正在尝试使用selenium和PhantomJS来抓取这个HTML。行模式重复行1到N,我不知道会有多少行。

// list of books (objects)
List<Book> books = new ArrayList<>();
books.add(new Book(1, 6));
books.add(new Book(2, 2));
books.add(new Book(3, 9));
books.add(new Book(4, 18));

List<Map<String, Object>> booksMap = Collections.emptyList();

// convert list into list of maps using regular for-loop
// map structure with 2 keys
for (Book book : books) {
    Map<String, Object> map = new HashMap<>();
    map.put("id", book.getId());
    map.put("quantity", book.getQuantity());

    booksMap.add(map);
}

在这种情况下,我正在尝试找到最大的class_by_name(specific_number)(即345678),它可以位于任何“Number Columns”中,它也位于与我的特定“unique_information”关联的同一行中我正在寻找(即1234)。

我在xpath上并不擅长,我不会提前知道具有该unique_information的父行(即可能在第1,2,3行等),所以我很难想出来使用contains语句确保两者都为真。

1 个答案:

答案 0 :(得分:0)

def findLargestNumInRow(id):
    xpath = '//table[@id="TableName"]/tbody/tr[td[3][div/div[contains(text(),"{0}")]]]'.format(id)
    tds = driver
              // find row which unique_information contains given id
              .find_element_by_xpath(xpath)
              // find all number child td
              .find_elements_by_css_selector('td.Numbers')

    numbers = [ td.text * 1 for td in tds]
    return numbers.sort()[-1]

findLargestNumInRow('1234')