Python gọi JavaScript

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 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 js0 API. API js0 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ố

Tôi có thể gọi JavaScript từ Python không?

JS2PY hoạt động bằng cách dịch trực tiếp JavaScript sang Python . Nó chỉ ra rằng bạn có thể chạy JS trực tiếp từ mã Python mà không cần cài đặt các công cụ lớn bên ngoài như V8. Để sử dụng mô-đun, trước tiên mô-đun phải được cài đặt vào hệ thống, vì mô-đun không được tích hợp sẵn.

Python có hoạt động với JavaScript không?

Mọi ứng dụng web Python hiện đại đều sử dụng JavaScript ở giao diện người dùng .

Jiphy là gì?

Jiphy là gì? . ” Nói cách khác, Jiphy chuyển đổi theo cả hai hướng giữa hai ngôn ngữ. 09-Jan-2020. an abbreviation of “JavaScript in, Python out.” In other words, Jiphy converts in both directions between the two languages.09-Jan-2020.

Chủ Đề