15

Selenium python Web ドライバーを使用して、Web アプリケーションからテーブル内の行をカウントする方法。ここでは、Web アプリケーションからテーブル内のすべてのデータを取得できますが、行と列を数えることができませんでした。これを行う方法を教えてください。

4

5 に答える 5

20

このようなことを試してください

int rowCount=driver.findElements(By.xpath("//table[@id='DataTable']/tbody/tr")).size();

int columnCount=driver.findElements(By.xpath("//table[@id='DataTable']/tbody/tr/td")).size();

参考までに: これは Java での実装です。

于 2013-02-12T16:15:58.617 に答える
13

Santoshsarma の答えは、Java ではほぼ正しいですが、列数ではなくセル数をカウントします。最初の行の列数をカウントする Python バージョンを次に示します。

row_count = len(driver.find_elements_by_xpath("//table[@id='DataTable']/tbody/tr"))
column_count = len(driver.find_elements_by_xpath("//table[@id='DataTable']/tbody/tr/td"))

テーブルにヘッダーがある場合は、代わりに列を数えることができます。

storeXpathCount は試していません。

于 2014-05-25T22:34:27.873 に答える
3

find_elements_byまたはexecute_scriptを使用して実行できます。

find_elements_byの結果にlenを適用してカウントを取得するのは正しい方法ですが、 execute_scriptを使用して行と列のカウントを取得する方法は、メソッド呼び出しの結果から取得するよりもはるかに高速です。lenfind_elements_by

rows_count = driver.execute_script("return document.getElementsByTagName('tr').length")
columns_count = driver.execute_script("return document.getElementsByTagName('tr')[0].getElementsByTagName('th').length")

以下は、 find_elements_by と execute_scriptのアプローチを使用した場合のパフォーマンス メトリックです。

from timeit import timeit

# Time metrics of retrieving 111 table rows
timeit(lambda:driver.execute_script("return document.getElementsByTagName('tr').length"), number=1000)
# 5.525
timeit(lambda:len(driver.find_elements_by_tag_name("tr")), number=1000) 
# 9.799
timeit(lambda:len(driver.find_elements_by_xpath("//table/tbody/tr")), number=1000)
# 10.656

# Time metrics of retrieving 5 table headers
timeit(lambda:driver.execute_script("return document.getElementsByTagName('tr')[0].getElementsByTagName('th').length"), number=1000)
# 5.441
timeit(lambda:len(driver.find_elements_by_tag_name("th")), number=1000)
8.604
timeit(lambda:len(driver.find_elements_by_xpath("//table/tbody/th")), number=1000)
# 9.336
于 2016-08-03T09:19:26.770 に答える