sách gpt4 ăn đã đi

Các lý do và giải pháp phổ biến khiến Python+Selenium không thể định vị các phần tử (Báo cáo: NoSuchElementException)

In lại Tác giả: qq735679552 Thời gian cập nhật: 29-09-2022 22:32:09 34 4
mua khóa gpt4 giày nike

CFSDN nhấn mạnh vào giá trị tạo ra nguồn mở và chúng tôi cam kết xây dựng nền tảng chia sẻ tài nguyên để mọi nhân viên CNTT có thể tìm thấy thế giới tuyệt vời của bạn tại đây.

Bài viết trên blog CFSDN này về các nguyên nhân và giải pháp phổ biến khiến Python+Selenium không thể định vị các phần tử (được báo cáo là: NoSuchElementException) đã được tác giả sưu tầm và biên soạn. Nếu bạn quan tâm đến bài viết này, hãy nhớ thích nó.

Khi thực hiện kiểm thử tự động các ứng dụng web, việc định vị các phần tử là điều cần thiết. Quá trình này thường gặp phải các tình huống không thể định vị được các phần tử (Selenium.common.Exceptions.NoSuchElementException được báo cáo. Nói chung, vấn đề này có thể được giải quyết từ các khía cạnh sau:

1. Không thể định vị được phần tử vì lý do Khung/Iframe:

Đây là lý do phổ biến nhất Trước hết, bạn cần hiểu bản chất của khung. Thực tế, khung được nhúng vào một trang khác và webdriver chỉ có thể xác định nó trên một trang tại một thời điểm, vì vậy bạn cần xác định vị trí tương ứng. frame đầu tiên và kiểm tra phần tử trang đó để định vị.

Giải pháp:

Nếu iframe có tên hoặc id, hãy sử dụng trực tiếp switch_to_frame("name value") hoặc switch_to_frame("id value"). như sau:

?
1
2
3
4
5
tài xế = webdriver. Firefox()
driver.get(r 'http://www.126.com/' )
driver.switch_to_frame( 'x-URS-iframe' ) #Cần chuyển sang iframe trước
tên người dùng = driver.find_element_by_name( 'e-mail' )
tên người dùng.xóa()

Nếu iframe không có tên hoặc id, nó có thể được định vị theo cách sau:

?
1
2
3
4
#Xác định vị trí iframe trước
yếu tố = driver.find_element_by_class_name( 'ỨNG DỤNG-biên tập-iframe' )
#Sau đó chuyển đối tượng định vị sang phương thức switch_to_frame()
driver.switch_to_frame(phần tử)

Sau khi hoàn tất thao tác, bạn có thể nhảy ra khỏi iframe hiện tại thông qua phương thức switch_to.parent_content() hoặc bạn có thể quay lại trang ngoài cùng thông qua phương thức switch_to.default_content().

2.Lý do lỗi mô tả Xpath:

Vì hệ thống phân cấp của Xpath quá phức tạp nên dễ mắc lỗi. Tuy nhiên, phương pháp định vị này có thể định vị hầu hết các phần tử một cách hiệu quả và bạn nên thành thạo nó.

Giải pháp:

2.1 Bạn có thể sử dụng firePath của Firefox để sao chép đường dẫn xpath. Phương pháp này rất dễ viết lại đường dẫn xpath do thay đổi lớp. Người mới bắt đầu có thể sao chép đường dẫn trước rồi thử sửa đổi nó.

2.2 Nâng cao trình độ viết xpath.

Bạn có thể đọc phần tóm tắt bài đăng trên blog khác của tác giả để biết chi tiết: Tóm tắt và ví dụ về định vị phần tử trong Selenuim+Python Bài đăng trên blog này tóm tắt chi tiết việc sử dụng Xpath.

Làm cách nào để kiểm tra xem Xpath được viết có đúng không? Sau khi ghi đường dẫn Xpath, bạn có thể sao chép trực tiếp vào firebug của trình duyệt Sohu để xem mã nguồn html và tìm kiếm thông qua Xpath: ô màu đỏ sau, nếu không báo lỗi nghĩa là đường dẫn Xpath được ghi là chính xác.

?
1
tìm_phần_tử_theo_xpath( "//đầu vào[@id='kw']" )

3. Trước khi tải trang, thực hiện các thao tác trên các thành phần trên trang:

Nói chung, trong trường hợp này, bạn có thể đặt thời gian chờ và chờ trang được hiển thị trước khi thao tác. Điều này cũng giống như thao tác thủ công: 3.1 Điểm bất lợi là bạn cần đặt thời gian chờ lâu hơn; và quá trình kiểm tra sẽ rất chậm nếu có quá nhiều trường hợp; 3.2 Đặt chờ một phần tử nhất định trên trang xuất hiện, chẳng hạn như văn bản hoặc hộp nhập liệu. Sau khi phần tử được chỉ định xuất hiện, bạn có thể thực hiện các thao tác. 3.3 Trong quá trình gỡ lỗi, mã html của trang có thể được in ra để phân tích.

Giải pháp: Nhập mô-đun thời gian.

?
1
2
nhập khẩu thời gian
thời gian.ngủ( 3 )

4. Id động không thể định vị được phần tử:

Giải pháp: Nếu phát hiện thấy đó là ID động, hãy trực tiếp sử dụng định vị xpath hoặc các phương pháp khác để xác định vị trí của nó.

5. Định vị phụ, chẳng hạn như đăng nhập hộp bật lên

Ví dụ: nếu bạn đăng nhập vào tài khoản Baidu thông qua hộp bật lên đăng nhập Baidu, trước tiên bạn cần điều hướng đến hộp bật lên Baidu, sau đó điều hướng đến tên người dùng và mật khẩu để đăng nhập.

?
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# mã hóa=utf-8
'''
Được tạo vào ngày 2016-7-20
@tác giả: Jennifer
Dự án: Đăng nhập vào tài khoản Baidu
'''
từ selen nhập khẩu trình điều khiển web
nhập khẩu thời gian
 
tài xế = webdriver. Firefox()
trình điều khiển.get( "http://www.baidu.com/" )
 
thời gian.ngủ( 3 )
 
#Click để đăng nhập: Một số thành phần có tên tj_login không hiển thị, chỉ cần nhấp vào nút đăng nhập hiển thị.
#Nếu không nó sẽ báo cáo: ElementNotVisibleException
phần tử0 = driver.find_elements_by_name( "tj_đăng nhập" )
ele0 TRONG phần tử0:
   nếu như ele0.is_displayed():
     ele0. nhấp()
 
#Trong hộp bật lên đăng nhập, trước tiên bạn cần xác định vị trí hộp bật lên đăng nhập
#Nếu không nó sẽ báo cáo: NoSuchElementException
phần tử1 = driver.find_element_by_class_name( "nội dung tang" )
phần tử11 = phần tử1.tìm_phần_tử_theo_id( "TANGRAM__PSP_8__tên người dùng" )
phần tử11.xóa()
phần tử11.gửi_khóa( "đăng nhập" )
 
phần tử2 = phần tử1.tìm_phần_tử_theo_id( "TANGRAM__PSP_8__mật khẩu" )
phần tử2.xóa()
phần tử2.gửi_khóa( "mật khẩu" )
 
phần tử3 = phần tử1.tìm_phần_tử_theo_id( "TANGRAM__PSP_8__gửi" )
phần tử3.click()
phần tử3.gửi()
 
thử :
   khẳng định "đăng nhập" TRONG driver.page_source
ngoại trừ Lỗi khẳng định:
   in "Đăng nhập thất bại"
khác :
   in "Đăng nhập thành công"
   thời gian.ngủ( 3 )
Cuối cùng :
   in "Hồ sơ kiểm tra: Đã kiểm tra"
trình điều khiển. đóng()

Bổ sung: Đã báo cáo: Selenium.common.Exceptions.ElementNotVisibleException

mã số

?
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
từ selen nhập khẩu trình điều khiển web
từ PIL nhập khẩu Hình ảnh
nhập khẩu thời gian
nhập khẩu gấu trúc như pd
nhập khẩu ngày giờ
 
tài xế = webdriver.Ie(r "C:\Program Files\internet explorer\IEDriverServer2.exe" )
trình điều khiển.get( "https://www.cib.com.cn/cn/minipage/page/login-firmalert.html" )
in ( "Vui lòng nhập tên người dùng và mật khẩu tài khoản của bạn để đăng nhập" )
đầu vào ( "====Nhấn phím bất kỳ để tiếp tục====" )
 
# in(driver.current_url) # https://corporatebank.cib.com.cn/firm/main/mainx.do
 
khung = driver.find_element_by_id( "khung làm việc" ) # Chuyển sang thẻ iframe để tìm kiếm
driver.switch_to_frame(khung) # Cắt thành thẻ iframe
 
# driver.switch_to_default_content() # Bạn cũng có thể tắt thẻ iframe và để nó làm mặc định
 
trình điều khiển.tìm_phần_tử_theo_xpath( '//div[@id="fast-way"]/ul/li[2]/a' ).nhấp() # Nhấp vào nút truy vấn chi tiết trong ngày
thời gian.ngủ( 2 )
thử :
   trình điều khiển.tìm_phần_tử_theo_xpath( '//div[@id="fast-way"]/ul/li[2]/a' ).nhấp() # Nhấp vào nút truy vấn chi tiết trong ngày
ngoại trừ Ngoại lệ như e:
   in ( "================================================================== , e)
thời gian.ngủ( 3 )

Phần này kết thúc bài viết này về các nguyên nhân và giải pháp phổ biến khiến Python+Selenium không thể định vị các phần tử (được báo cáo là: NoSuchElementException). Để biết thêm nội dung liên quan về việc Python+Selenium không thể định vị các phần tử, vui lòng tìm kiếm các bài viết trước của tôi hoặc tiếp tục duyệt. Những bài viết liên quan sau đây mong các bạn sẽ ủng hộ mình trong thời gian tới! .

Link gốc: https://blog.csdn.net/chang995196962/article/details/84634570.

Cuối cùng, bài viết này về các lý do và giải pháp phổ biến khiến Python+Selenium không thể định vị các phần tử (được báo cáo: NoSuchElementException) sẽ kết thúc tại đây. Nếu bạn muốn biết thêm về các lý do và giải pháp phổ biến khiến Python+Selenium không thể định vị các phần tử. (đã báo cáo: NoSuchElementException): NoSuchElementException), vui lòng tìm kiếm các bài viết của CFSDN hoặc tiếp tục duyệt các bài viết liên quan. Tôi hy vọng bạn sẽ ủng hộ blog của tôi trong tương lai! .

34 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress