Python Selenium返回HTML位置



我有一个简单的HTML表,仅包含tr/td。我需要返回准确的表行,准确的记录的表列号。解决方案应该能够处理任何数量的行/列。我使用:

webdriver.find_element_by_xpath("//*[contains(text(), '8')]")

现在我需要返回它的位置,到目前为止,我一直在寻找属性,如value_of_css_property/getCssValue等。我是新硒,任何帮助将不胜感激。

如果您需要定位包含特定文本的td元素的行:

element = webdriver.find_element_by_xpath("//tr[contains(td, '8')]")

或者,如果需要定位特定的单元格(td元素):

element = webdriver.find_element_by_xpath("//td[contains(., '8')]")
然后,你可以得到location:
print(element.location)

这将给你页面上元素的坐标


如果需要获取包含所需文本的单元格的行号和列号:

table = webdriver.find_element_by_id("mytable")
rows = table.find_elements_by_tag_name("tr")
for row_index, row in enumerate(rows, start=1): 
    cells = row.find_elements_by_tag_name("td")
    for column_index, cell in enumerate(cells, start=1):
        if "8" in cell.text:
            print("Found a match!")
            print(row_index, column_index)
            break

我知道这个任务,这是你的解决方案

class ElementNotFoundInTable(Exception):
    pass

def find_number(table_content, number):
    """
    returns position of element in the table,
    indexes start from 0
    :param table_content: a content of tbody element
    :param str number: a number to look for in the table
    :return:
    """
    table_content = table_content.strip("<trd/>")
    table_rows = table_content.split("</td></tr><tr><td>")
    for table_row in table_rows:
        if number in table_row:
            row_idx = table_rows.index(table_row)
            column_idx = table_row.split("</td><td>").index(number)
            return row_idx, column_idx
    raise ElementNotFoundInTable("Element '{0}' is not found in the table".format(number))

tbody = self.driver.find_element_by_css_selector("table tbody")
tbody_src = tbody.get_attribute("innerHTML")
find_number(tbody_src, '8')

您可以使用以下命令获取页面的高度或宽度位置

WebElement needed = webdriver.find_element_by_xpath("//*[contains(text(), '8')]"); //this puts it in a callable element for you
needed.getLocation().getY(); //this will give the height on the page
needed.getLocation().getX(); //this will give the width on the page

但实际上你并没有得到xpath。您最好找到要遍历的表,并按照这些行执行操作。

List<WebElement> tableRows = webDriver.findElements(By.xpath("tbody[1]/tr"))
    for (WebElement singleRow: tableRows)/*gets the table rows in a List*/
    {
        List<WebElement> cells = singleRow.findElements(By.xpath("td"))
        for (WebElement singleCell: cells)/*gets the rows cells in a List*/
        {
             trIteratorForRowCount++
             if (singleCell.getText().contains('8'))
             {
                  tdIteratorForCellCount++
                  print (("Total cell is (%s, %s) " % (trIteratorForCellCount, tdIteratorForCellCount))
             }
        }
    }

相关内容

  • 没有找到相关文章

最新更新