Bạn có thể thực thi Javascript với Selenium WebDriver. Trong hướng dẫn này, bạn sẽ học cách chạy js trực tiếp từ mã Python của mình
Bạn sử dụng Selenium để thực hiện kiểm tra tự động các ứng dụng web hoặc trang web hoặc chỉ tự động hóa trình duyệt web. Nó có thể tự động hóa cả trình duyệt máy tính để bàn và trình duyệt di động.
Trình quản trị web Selenium có thể thực thi Javascript. Sau khi tải một trang, bạn có thể thực thi bất kỳ javascript nào bạn muốn. Selenium phải được cài đặt webdriver để hoạt động.
Tất cả những gì cần thiết để thực thi Javascript là gọi phương thức execute_script[js]
trong đó js là mã javascript của bạn
khóa học liên quan
- Khóa học & ví dụ về tự động hóa web Selenium
jav
JavaScript là gì?
JavaScript là một ngôn ngữ kịch bản được tạo để chạy trên đầu trang web [phía máy khách]. Trước đây, nó chỉ làm cho trang web có tính tương tác, nhưng ngày nay có các khung hoàn chỉnh cho phép bạn xây dựng giao diện người dùng của ứng dụng
Làm cách nào để thực thi Javascript?
Trước khi bạn có thể sử dụng selen, hãy đảm bảo rằng nó đã được cài đặt và bạn cũng có trình điều khiển web phù hợp. Bạn có thể khởi tạo selen theo cách bạn vẫn thường làm
Nếu bạn tải một trang web bằng Selenium Python, bạn có thể đưa JavaScript vào trang đó theo cách thủ công. Nếu bạn đã đặt tên cho trình điều khiển đối tượng webdriver của mình, thì bạn có thể thực thi nó như vậy
1
driver.execute_script["some javascript code here"];
Chương trình bên dưới chạy lệnh javascript một dòng sau khi tải trang. Điều này sẽ hiển thị hộp cảnh báo trong trang web
Pyscript/Pyodide hỗ trợ khả năng tương tác tuyệt vời giữa JavaScript và Python. Python có thể gọi JavaScript và JavaScript có thể gọi Python. Các sự kiện DOM có thể sử dụng các hàm Python làm hàm gọi lại. Bài viết này đề cập đến Python gọi các hàm JavaScript và cách truyền và nhận dữ liệu bằng Proxy. Trong một bài viết khác, tôi sẽ đề cập đến việc gọi Python từ JavaScript và cách sử dụng Python trong các sự kiện
ký tự. Gọi lại sự kiện JavaScript
Pyodide gắn các hàm JavaScript vào không gian tên chung. Để nhập không gian tên toàn cầu vào Python, hãy bao gồm dòng này
1
nhập js
Nếu bạn sẽ gọi các hàm JavaScript không đồng bộ, hãy thêm dòng này
1
nhập asyncio
Gọi JavaScript từ Python
Ví dụ này định nghĩa một hàm JavaScript square[]
được gọi từ Python. Điều quan trọng là nhập mô-đun js
và gọi các hàm JavaScript bằng cách sử dụng không gian tên js
. Đây là một ví dụ hoàn chỉnh mà bạn có thể sao chép và dán vào tệp cục bộ và tải vào trình duyệt. Tôi thích bắt đầu một máy chủ web Python đơn giản để chạy các ví dụ. python -m http.server 9000
. Các ví dụ trong tương lai sẽ không bao gồm bản tóm tắt HTML
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
Ví dụ 1
nhập js
# Gọi một hàm JS
kết quả = js. hình vuông[4]
in[kết quả]
hàm vuông[số] {
trả về số * số;
}
Gọi Async JavaScript từ Python
Chìa khóa để gọi các hàm không đồng bộ của JavaScript là nhập asyncio
và sử dụng từ khóa đang chờ như trong ví dụ này
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
nhập js
nhập asyncio
kết quả = đang chờ js. hình vuông[4]
in[kết quả]
không đồng bộ chức năng vuông[số] {
trả về số * số;
}
Đây là một ví dụ phức tạp hơn gọi hàm tìm nạp JavaScript. Lưu ý cách chờ hoàn thành chức năng không đồng bộ. Ví dụ này sẽ hiển thị địa chỉ IP công cộng của bạn
1
2
3
4
5
6
7
8
9
10
11
nhập js
nhập asyncio
url = "https. //api. ipify. tổ chức"
kết quả = đang chờ [đang chờ js.tìm nạp[url]] . .văn bản[]
in['IP công cộng của tôi. {}'. định dạng[kết quả]]
JavaScript trả về một đối tượng
Khi một hàm JavaScript trả về một đối tượng cho trình gọi Python, một JsProxy
được trả về. Nếu bạn cố gắng lặp lại proxy, một lỗi sẽ được báo cáo
1
Tệp "", dòng 5, in TypeError: 'pyodide. JsProxy' đối tượng là không có thể lặp lại ]
Một ví dụ thất bại
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
nhập js
kết quả = js. get_object[]
cho r trong kết quả.
in[r]
hàm get_object[] {
trả lại {
"a". 4,
"b". "4"
};
}
Giải pháp là gọi object.to_py[]
. Ví dụ này hoạt động chính xác
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
nhập js
kết quả = js. get_object[]. to_py[]
cho r trong kết quả.
in[r]
hàm get_object[] {
trả lại {
"a". 4,
"b". "4"
};
}
Truyền một đối tượng cho JavaScript
Nếu bạn chuyển một đối tượng Python cho một hàm JavaScript, thì hàm đó sẽ nhận được một Proxy. Để nhận các khóa riêng lẻ, hãy gọi obj. get[“tên khóa”]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
nhập js
obj = {
"a". 4,
"b". "8"
}
js. put_object[obj]
function put_object[obj] {
// obj là Proxy
bảng điều khiển. log["a = " + obj.lấy["a"]];
bảng điều khiển. log["b = " + obj.lấy["b"]];
}
Một tùy chọn khác là nhập trình trợ giúp ________ 10 và chuyển đổi đối tượng Python
Điều này tương tự với PyProxy. toJs, nhưng để sử dụng từ Python. Nếu đối tượng có thể được dịch hoàn toàn sang JavaScript, nó sẽ được trả về không thay đổi. Nếu không thể chuyển đổi đối tượng thành JavaScript, phương thức này sẽ trả về một JsProxy của một PyProxy, như thể bạn đã sử dụng pyodide. tạo_proxy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
nhập js
từ pyodide nhập to_js
obj = {
"a". 4,
"b". "8"
}
js. put_object[to_js[obj]]
function put_object[obj] {
// obj là Bản đồ
cho[var [key, val] of obj] {
bảng điều khiển. log["Key. " + phím, " Giá trị. " + val];
}
}
Chuyển đổi từ điển thành đối tượng JavaScript
Để chuyển đổi từ điển, hãy sử dụng API
driver.execute_script["some javascript code here"];1
Phương thức
driver.execute_script["some javascript code here"];2 chuyển đổi danh sách các cặp khóa-giá trị [từ điển Python] thành một đối tượng
1
2
3
từ js nhập Đối tượng
tiêu đề = { "Loại nội dung". "application/json" }
đối tượng = Đối tượng. fromEntries[to_js[tiêu đề]]
Một ví dụ đang gọi JavaScript js
0 API. API js
0 yêu cầu tham số tiêu đề phải là một đối tượng JavaScript
1
2
3
4
5
6
7
8
9
10
phản hồi = đang chờ js. tìm nạp[
url,
phương pháp="ĐĂNG",
body=json. đổ[cơ thể],
chuyển hướng="thủ công",
tiêu đề=Đối tượng. fromEntries[to_js[tiêu đề]]
]
j = [chờ phản hồi.json[]]. to_py[]
trạng thái = phản hồi. trạng thái
Chuyển đổi đối tượng Python BytesIO thành JavaScript Blob
Để chuyển đổi đối tượng BytesIO thành Blob, thường được sử dụng với API tệp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
từ js nhập Blob, window
từ pyodide nhập đến_js
# Đọc đối tượng BytesIO và chuyển đổi dữ liệu sang JavaScript
nội dung = to_js[buf.đọc[]]
# Tạo một Blob từ đối tượng nội dung và chỉ định loại nội dung của nó
b = Blob. mới[[nội dung] . , {type: "hình ảnh/png"}]
# Ví dụ sử dụng Blob
fileHandle = chờ cửa sổ. showSaveFilePicker[]
file = await fileHandle. createWritable[]
đang chờ tệp. viết[b]
đang chờ tệp. đóng[]
Bản tóm tắt
Hy vọng phần giới thiệu này giúp bạn hiểu cách gọi các hàm JavaScript từ Python và truyền và nhận dữ liệu bao gồm các đối tượng. Khi Pyscript phát triển, tôi chắc chắn sẽ có nhiều chuyển đổi tự động hơn và nhiều chức năng hơn để hỗ trợ chuyển đổi loại
Thêm thông tin
- Các bài viết khác mà tôi đã viết trên Pyscript
- Phiên bản pyodide 0. 20 Tài liệu
- to_js[]
- Sự vật. fromEntries[]
tín dụng nhiếp ảnh
Tôi viết bài miễn phí về công nghệ. Gần đây, tôi đã biết về Pexels. com cung cấp hình ảnh miễn phí. Hình ảnh trong bài viết này được cung cấp bởi Ashithosh U tại Pexels
John Hanley
Tôi thiết kế phần mềm cho các hệ thống cấp doanh nghiệp và trung tâm dữ liệu. Nền tảng của tôi là hơn 30 năm về ảo hóa lưu trữ [SCSI, FC, iSCSI, mảng đĩa, hình ảnh]. Hơn 20 năm trong lĩnh vực nhận dạng, bảo mật và pháp y
Trong hơn 14 năm qua, tôi đã làm việc trong lĩnh vực đám mây [AWS, Azure, Google, Alibaba, IBM, Oracle] để thiết kế các giải pháp phần mềm lai và đa đám mây. Tôi là một MVP/GDE với một số