Tôi muốn lấy số lượng hàng của bảng trên trang web bằng Selenium Python. Tôi đã thử theo cách sau đây mô tả ở đây: Cách đếm không có hàng trong bảng từ ứng dụng web bằng Selenium Python WebDriver
rows=len[driver.find_element_by_xpath["//table[@id='SheetContentPlaceHolder_GridView1']/tbody/tr"]]
Kết quả tôi nhận được là như sau:
rows=len[driver.find_element_by_xpath["//table[@id='SheetContentPlaceHolder_GridView1']/tbody/tr"]]
TypeError: object of type 'FirefoxWebElement' has no len[]
Tôi không hiểu những gì tôi đã làm sai.
Cảm ơn bạn đã giúp đỡ
Chàng
43,8K10 Huy hiệu vàng38 Huy hiệu bạc82 Huy hiệu Đồng10 gold badges38 silver badges82 bronze badges
hỏi ngày 6 tháng 2 năm 2020 lúc 8:45Feb 6, 2020 at 8:45
4
Phương thức driver.find_element_by_xpath[...]
trả về bạn chỉ là đứa con đầu tiên [hàng] của bảng.
Thay đổi dòng thành driver.find_elements_by_xpath[...]
. Nó trả về một danh sách các yếu tố. Vì vậy, mã mới sẽ là:
rows = driver.find_elements_by_xpath["//table[@id='SheetContentPlaceHolder_GridView1']/tbody/tr"]
number_of_rows = len[rows]
Đã trả lời ngày 6 tháng 2 năm 2020 lúc 8:52Feb 6, 2020 at 8:52
1
find_element_by_xpath[]
sẽ trả về một yếu tố duy nhất và khi bạn đang sử dụng Firefox, thì WebEuity đầu tiên được trả lại có thể được chuyển cho len[]
. Do đó bạn thấy lỗi:
TypeError: object of type 'FirefoxWebElement' has no len[]
Vì vậy, thay vì find_element_by_xpath[]
, bạn cần sử dụng
rows=len[driver.find_element_by_xpath["//table[@id='SheetContentPlaceHolder_GridView1']/tbody/tr"]]
TypeError: object of type 'FirefoxWebElement' has no len[]
1 sẽ trả về danh sách.Lý tưởng nhất, để trích xuất số lượng hàng trong bảng JS bằng Selenium và Python, bạn phải tạo ra WebDriverWait cho
rows=len[driver.find_element_by_xpath["//table[@id='SheetContentPlaceHolder_GridView1']/tbody/tr"]]
TypeError: object of type 'FirefoxWebElement' has no len[]
2 và bạn có thể sử dụng một trong các giải pháp sau:Sử dụng
3:rows=len[driver.find_element_by_xpath["//table[@id='SheetContentPlaceHolder_GridView1']/tbody/tr"]] TypeError: object of type 'FirefoxWebElement' has no len[]
print[len[WebDriverWait[driver, 20].until[EC.visibility_of_all_elements_located[[By.XPATH, "//table[@id='SheetContentPlaceHolder_GridView1']/tbody/tr"]]]]]
Lưu ý: Bạn phải thêm các bản nhập khẩu sau: : You have to add the following imports :
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC
Đã trả lời ngày 6 tháng 2 năm 2020 lúc 11:32Feb 6, 2020 at 11:32
Nhận số lượng hàng, tham số hóa XPath của ô cuối cùng để nhận văn bản của nó. Nhận số lượng hàng bằng cách sử dụng hành động của các phần tử đếm, Xpath // tr sẽ ghi lại tất cả các hàng của bảng, lưu trữ giá trị đầu ra trong một tham số để sử dụng thêm.How To Handle Web Tables in Selenium Python.
Xpath cho hàng bảng trong selenium ở đâu?
Hãy chọn một phần tử trong bảng web và tìm XPath của nó. Đối với Chrome, nhấp chuột phải và kiểm tra phần tử đã cho để tìm XPath của nó. Để tìm XPath của một phần tử UI trong Firefox, nhấp chuột phải vào phần tử mong muốn, hãy truy cập vào các phần tử kiểm tra để mở thanh tra viên sẽ giúp xác định XPath của nó.
Mã Selenium nào sau đây trả về số lượng hàng của bảng web trên trang?
Câu hỏi: Làm thế nào để đếm tổng số hàng của bảng bằng Selenium 3.0? Trả lời: Danh sách {WebEuity} hàng = trình điều khiển.
Làm thế nào để Python xử lý các bảng web trong selenium?find_elements_by_xpath [] method. Since this method returns a list, we can obtain the row count with the help of len method.
từ Selenium Nhập WebDriver. # Nhập lớp phím ..
# Nhập WebDriver từ Selenium Nhập WebDriverselenium import webdriver # Nhập lớp phím từ selenium.webdriver.Common Chìa khóa nhập khẩuselenium.webdriver.common import keys Driver = WebDriver.chrom [Executable_path = "C: \\ cromedriver.exe"]=webdriver.Chrome [executable_path="C:\\chromedriver.exe"] # Nhận Phương thức để khởi chạy URL driver.get["//www.softwaretestingmaterial.com/sample-webpage- to-automate/"].get["//www.softwaretestingmaterial.com/sample-webpage- to-automate/"] # Để xác định một ô, hàng 3 và cột 2 c = driver.find_element_by_xpath ["//*[@class = 'sptable']/tbody/tr [3]/td [2]"]= driver.find_elements_by_xpath["//*[@class= 'spTable']/tbody/tr"] # để lấy văn bản print[len[l]][len[l]] Trong bài viết tiếp theo, chúng tôi sẽ học xử lý cookie trong Selenium Python driver.quit[].quit[] |
Bài viết liên quan:find_elements_by_xpath [] method. Since this method returns a list, we can obtain the row count with the help of len method. We have to fix a row number before calculating the column count with
Thực hiện mã để tính toán số cột trong một bảng.
# Nhập WebDriver từ Selenium Nhập WebDriverselenium import webdriver # Nhập lớp phím từ selenium.webdriver.Common Chìa khóa nhập khẩuselenium.webdriver.common import keys Driver = WebDriver.chrom [Executable_path = "C: \\ cromedriver.exe"]=webdriver.Chrome [executable_path="C:\\chromedriver.exe"] # Nhận Phương thức để khởi chạy URL driver.get["//www.softwaretestingmaterial.com/sample-webpage- to-automate/"].get["//www.softwaretestingmaterial.com/sample-webpage- to-automate/"] # Để xác định các cột trong hàng 3 l = driver.find_elements_by_xpath ["//*[@class = 'sptable']/tbody/tr [3]/td"]=driver.find_elements_by_xpath["//*[@class= 'spTable']/tbody/tr[3]/td"] # Để nhận phương thức LEN số cột print[len[l]][len[l]] # Để đóng trình duyệt driver.quit[].quit[] |
Để có được các tiêu đề trong một bảng, trước tiên chúng tôi sẽ tạo một XPath tùy chỉnh để biểu diễn tất cả các hàng trong một bảng với sự trợ giúp của phương thức Find_elements_by_xpath []. Vì phương thức này trả về một danh sách, chúng ta có thể có được số lượng hàng với sự trợ giúp của phương thức LEN. Chúng ta phải lặp lại thông qua hàng số 1, sau đó di chuyển đến. Khi chúng tôi giữ hàng đầu tiên, chúng tôi sẽ sử dụng phương thức văn bản để lấy tất cả các tiêu đề bảng.find_elements_by_xpath [] method. Since this method returns a list, we can obtain the row count with the help of len method. We have to iterate through row number 1, then move to . Once we get hold of the first row, we shall use the text method to get all the table headers.
Thực hiện mã để có được các tiêu đề bảng.
# Nhập WebDriver từ Selenium Nhập WebDriverselenium import webdriver # Nhập lớp phím từ selenium.webdriver.Common Chìa khóa nhập khẩuselenium.webdriver.common import keys Driver = WebDriver.chrom [Executable_path = "C: \\ cromedriver.exe"]=webdriver.Chrome [executable_path="C:\\chromedriver.exe"] # Nhận Phương thức để khởi chạy URL driver.get["//www.softwaretestingmaterial.com/sample-webpage- to-automate/"].get["//www.softwaretestingmaterial.com/sample-webpage- to-automate/"] # Để xác định các cột trong hàng 3 l = driver.find_elements_by_xpath ["//*[@class = 'sptable']/tbody/tr [3]/td"]=driver.find_elements_by_xpath ["//*[@class= 'spTable']/tbody/tr[1]/th"] # Để nhận phương thức LEN số cột foriinl:iinl: # Để đóng trình duyệt print[i.text][i.text] Để có được các tiêu đề trong một bảng, trước tiên chúng tôi sẽ tạo một XPath tùy chỉnh để biểu diễn tất cả các hàng trong một bảng với sự trợ giúp của phương thức Find_elements_by_xpath []. Vì phương thức này trả về một danh sách, chúng ta có thể có được số lượng hàng với sự trợ giúp của phương thức LEN. Chúng ta phải lặp lại thông qua hàng số 1, sau đó di chuyển đến. Khi chúng tôi giữ hàng đầu tiên, chúng tôi sẽ sử dụng phương thức văn bản để lấy tất cả các tiêu đề bảng. driver.close[].close [] |
Thực hiện mã để có được các tiêu đề bảng.find_elements_by_xpath [] method. Since this method returns a list, we can obtain the row count with the help of len method. We have to iterate through the columns of a particular row number [greater than 1], having
# Để xác định các tiêu đề cột bảng theo hàng 1
# Nhập WebDriver từ Selenium Nhập WebDriverselenium import webdriver # Nhập lớp phím từ selenium.webdriver.Common Chìa khóa nhập khẩuselenium.webdriver.common import keys Driver = WebDriver.chrom [Executable_path = "C: \\ cromedriver.exe"]=webdriver.Chrome [executable_path="C:\\chromedriver.exe"] # Nhận Phương thức để khởi chạy URL driver.get["//www.softwaretestingmaterial.com/sample-webpage- to-automate/"].get["//www.softwaretestingmaterial.com/sample-webpage- to-automate/"] # Để xác định các cột trong hàng 3 l = driver.find_elements_by_xpath ["//*[@class = 'sptable']/tbody/tr [3]/td"]=driver.find_elements_by_xpath ["//*[@class= 'spTable']/tbody/tr[3]/td"] # Để nhận phương thức LEN số cột foriinl:iinl: # Để đóng trình duyệt print[i.text][i.text] Để có được các tiêu đề trong một bảng, trước tiên chúng tôi sẽ tạo một XPath tùy chỉnh để biểu diễn tất cả các hàng trong một bảng với sự trợ giúp của phương thức Find_elements_by_xpath []. Vì phương thức này trả về một danh sách, chúng ta có thể có được số lượng hàng với sự trợ giúp của phương thức LEN. Chúng ta phải lặp lại thông qua hàng số 1, sau đó di chuyển đến. Khi chúng tôi giữ hàng đầu tiên, chúng tôi sẽ sử dụng phương thức văn bản để lấy tất cả các tiêu đề bảng. driver.close[].close[] |
Thực hiện mã để có được các tiêu đề bảng.find_elements_by_xpath [] method. Since this method returns a list, we can obtain the row count with the help of len method. We have to iterate through the rows of a particular column number, having a
# Để xác định các tiêu đề cột bảng theo hàng 1
# Nhập WebDriver từ Selenium Nhập WebDriverselenium import webdriver # Nhập lớp phím từ selenium.webdriver.Common Chìa khóa nhập khẩuselenium.webdriver.common import keys Driver = WebDriver.chrom [Executable_path = "C: \\ cromedriver.exe"]=webdriver.Chrome [executable_path="C:\\chromedriver.exe"] # Nhận Phương thức để khởi chạy URL driver.get["//www.softwaretestingmaterial.com/sample-webpage- to-automate/"].get["//www.softwaretestingmaterial.com/sample-webpage- to-automate/"] # Để xác định các cột trong hàng 3 l = driver.find_elements_by_xpath ["//*[@class = 'sptable']/tbody/tr [3]/td"]=driver.find_elements_by_xpath ["//*[@class= 'spTable']/tbody/tr/td[3]"] # Để nhận phương thức LEN số cột foriinl:iinl: # Để đóng trình duyệt print[i.text][i.text] Để có được các tiêu đề trong một bảng, trước tiên chúng tôi sẽ tạo một XPath tùy chỉnh để biểu diễn tất cả các hàng trong một bảng với sự trợ giúp của phương thức Find_elements_by_xpath []. Vì phương thức này trả về một danh sách, chúng ta có thể có được số lượng hàng với sự trợ giúp của phương thức LEN. Chúng ta phải lặp lại thông qua hàng số 1, sau đó di chuyển đến. Khi chúng tôi giữ hàng đầu tiên, chúng tôi sẽ sử dụng phương thức văn bản để lấy tất cả các tiêu đề bảng. driver.close[].close[] |
Thực hiện mã để có được các tiêu đề bảng.find_elements_by_xpath [] method. Since this method returns a list, we can obtain the row and column count with the help of len method. We have to iterate through each row and each column of a particular table then fetch the cell data with the text method.
# Để xác định các tiêu đề cột bảng theo hàng 1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | # Nhập WebDriver từ Selenium Nhập WebDriverselenium import webdriver # Nhập lớp phím từ selenium.webdriver.Common Chìa khóa nhập khẩuselenium.webdriver.common import keys Driver = WebDriver.chrom [Executable_path = "C: \\ cromedriver.exe"]=webdriver.Chrome [executable_path="C:\\chromedriver.exe"] # Nhận Phương thức để khởi chạy URL u="//www.softwaretestingmaterial.com/sample-webpage-to-automate/"="//www.softwaretestingmaterial.com/sample-webpage-to-automate/" driver.get[u].get[u] # Để xác định các hàng bảng r = driver.find_elements_by_xpath ["// bảng [@class = 'sptable']/tbody/tr"]]= driver.find_elements_by_xpath["//table[@class= 'spTable']/tbody/tr"] # Để xác định các cột bảng c = driver.find_elements_by_xpath ["//*[@class = 'sptable']/tbody/tr [3]/td"]=driver.find_elements_by_xpath["//*[@class= 'spTable']/tbody/tr[3]/td"] # Để nhận được số lượng hàng với phương thức LEN rc=len[r] =len[r] # Để nhận đếm cột bằng phương pháp LEN cc=len[c]=len[c] # để đi qua các hàng bảng không bao gồm các tiêu đề foriinrange[2,rc+1]:iinrange [2,rc+1]: # để đi qua cột bảng forjinrange[1,cc+1]:jinrange[1,cc+1]: # Để có được tất cả dữ liệu ô bằng phương thức văn bản d=driver.find_element_by_xpath["//tr["+str[i]+"]/td["+str[j]+"]"].text=driver.find_element_by_xpath["//tr["+str[i]+"]/td["+str[j]+"]"].text print[d][d] #để đóng trình duyệt driver.close[].close[] |
Để xác minh xem một văn bản cụ thể có tồn tại trong bảng hay không, trước tiên chúng ta sẽ tạo một XPath tùy chỉnh để biểu thị tất cả các hàng và cột trong một bảng với sự trợ giúp của phương thức Find_elements_by_xpath []. Vì phương thức này trả về một danh sách, chúng ta có thể có được số lượng hàng và cột với sự trợ giúp của phương thức LEN.find_elements_by_xpath [] method. Since this method returns a list, we can obtain the row and column count with the help of len method.
Chúng ta phải lặp qua mỗi hàng và mỗi cột của một bảng cụ thể sau đó tìm nạp dữ liệu ô bằng phương thức văn bản. Khi dữ liệu ô được tìm nạp, chúng tôi sẽ xác minh xem nó có khớp với văn bản mà chúng tôi đang tìm kiếm với chức năng trợ giúp của văn bản [] trong XPath hay không.text method. Once the cell data is fetched, we shall verify if it matches with the text we are looking for with the help of text [] function in xpath.
Thực hiện mã để tìm kiếm một văn bản cụ thể trong một bảng.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | # Nhập WebDriver từ Selenium Nhập WebDriverselenium import webdriver # Nhập lớp phím từ selenium.webdriver.Common Chìa khóa nhập khẩuselenium.webdriver.common import keys Driver = WebDriver.chrom [Executable_path = "C: \\ cromedriver.exe"]=webdriver.Chrome [executable_path="C:\\chromedriver.exe"] # Nhận Phương thức để khởi chạy URL u="//www.softwaretestingmaterial.com/sample-webpage-to-automate/"="//www.softwaretestingmaterial.com/sample-webpage-to-automate/" driver.get[u].get[u] # Để xác định các hàng bảng r = driver.find_elements_by_xpath ["// bảng [@class = 'sptable']/tbody/tr"]]= driver.find_elements_by_xpath["//table[@class= 'spTable']/tbody/tr"] # Để xác định các cột bảng c = driver.find_elements_by_xpath ["//*[@class = 'sptable']/tbody/tr [3]/td"]=driver.find_elements_by_xpath["//*[@class= 'spTable']/tbody/tr[3]/td"] # Để nhận được số lượng hàng với phương thức LEN rc=len[r] =len[r] # Để nhận đếm cột bằng phương pháp LEN cc=len[c]=len[c] # để đi qua các hàng bảng không bao gồm các tiêu đề foriinrange[2,rc+1]:iinrange [2,rc+1]: # để đi qua cột bảng forjinrange[1,cc+1]:jinrange[1,cc+1]: # Để có được tất cả dữ liệu ô bằng phương thức văn bản d=driver.find_element_by_xpath["//tr["+str[i]+"]/td["+str[j]+"]"].text=driver.find_element_by_xpath["//tr["+str[i]+"]/td["+str[j]+"]"].text #để đóng trình duyệt Để xác minh xem một văn bản cụ thể có tồn tại trong bảng hay không, trước tiên chúng ta sẽ tạo một XPath tùy chỉnh để biểu thị tất cả các hàng và cột trong một bảng với sự trợ giúp của phương thức Find_elements_by_xpath []. Vì phương thức này trả về một danh sách, chúng ta có thể có được số lượng hàng và cột với sự trợ giúp của phương thức LEN. =driver.find_elements_by_xpath["//td[text[] = 'EID001']"] Chúng ta phải lặp qua mỗi hàng và mỗi cột của một bảng cụ thể sau đó tìm nạp dữ liệu ô bằng phương thức văn bản. Khi dữ liệu ô được tìm nạp, chúng tôi sẽ xác minh xem nó có khớp với văn bản mà chúng tôi đang tìm kiếm với chức năng trợ giúp của văn bản [] trong XPath hay không. s=len[m]=len[m] Thực hiện mã để tìm kiếm một văn bản cụ thể trong một bảng. If[s>0]:[s> 0]: # Nhập WebDriver["Text found"] #để đóng trình duyệt driver.close[].close[] |
Để xác minh xem một văn bản cụ thể có tồn tại trong bảng hay không, trước tiên chúng ta sẽ tạo một XPath tùy chỉnh để biểu thị tất cả các hàng và cột trong một bảng với sự trợ giúp của phương thức Find_elements_by_xpath []. Vì phương thức này trả về một danh sách, chúng ta có thể có được số lượng hàng và cột với sự trợ giúp của phương thức LEN.find_element_by_xpath [] method
Chúng ta phải lặp qua mỗi hàng và mỗi cột của một bảng cụ thể sau đó tìm nạp dữ liệu ô bằng phương thức văn bản. Khi dữ liệu ô được tìm nạp, chúng tôi sẽ xác minh xem nó có khớp với văn bản mà chúng tôi đang tìm kiếm với chức năng trợ giúp của văn bản [] trong XPath hay không.
# Nhập WebDriver từ Selenium Nhập WebDriverselenium import webdriver # Nhập lớp phím từ selenium.webdriver.Common Chìa khóa nhập khẩuselenium.webdriver.common import keys Driver = WebDriver.chrom [Executable_path = "C: \\ cromedriver.exe"]=webdriver.Chrome [executable_path="C:\\chromedriver.exe"] # Nhận Phương thức để khởi chạy URL u="//www.softwaretestingmaterial.com/sample-webpage-to-automate/"="//www.softwaretestingmaterial.com/sample-webpage-to-automate/" driver.get[u].get[u] # Để tìm kiếm văn bản cần thiết của chúng tôi m = driver.find_elements_by_xpath ["// td [text [] = 'eid001']"]= driver.find_element_by_xpath["//*[@class= 'spTable']/tbody/tr[3]/td[2]"] # Để có được kích thước của danh sách bằng phương pháp LEN print[c.text][c.text] #để đóng trình duyệt driver.close[].close[] |
Để xác minh xem một văn bản cụ thể có tồn tại trong bảng hay không, trước tiên chúng ta sẽ tạo một XPath tùy chỉnh để biểu thị tất cả các hàng và cột trong một bảng với sự trợ giúp của phương thức Find_elements_by_xpath []. Vì phương thức này trả về một danh sách, chúng ta có thể có được số lượng hàng và cột với sự trợ giúp của phương thức LEN.Handling cookies in Selenium Python
Chúng ta phải lặp qua mỗi hàng và mỗi cột của một bảng cụ thể sau đó tìm nạp dữ liệu ô bằng phương thức văn bản. Khi dữ liệu ô được tìm nạp, chúng tôi sẽ xác minh xem nó có khớp với văn bản mà chúng tôi đang tìm kiếm với chức năng trợ giúp của văn bản [] trong XPath hay không.
- Thực hiện mã để tìm kiếm một văn bản cụ thể trong một bảng.
- # Nhập WebDriver
- từ Selenium Nhập WebDriver
- # Nhập lớp phím
- từ selenium.webdriver.Common Chìa khóa nhập khẩu
Rajkumar SM là người sáng lập Softwaretestingm vật liệu. Anh ấy là một kỹ sư kiểm tra phần mềm được chứng nhận chuyên nghiệp và một blogger & một YouTuber bởi một sự lựa chọn. Ông có nhiều kinh nghiệm trong lĩnh vực thử nghiệm phần mềm. Hơn nữa, anh ấy thích ở bên vợ và một đứa trẻ dễ thương 'tự do'.