Nhấp vào nút javascript selen python

Chúng ta hãy xem xét một vài cách khác nhau để thực thi các câu lệnh JavaScript thông qua Python Selenium WebDriver

qua

Arunkumar Velusamy

·

Tháng 12. 13, 18 · Hướng dẫn

Thích

Nhận xét

Tiết kiệm

tiếng riu ríu

168. 39K Lượt xem

Tham gia cộng đồng DZone và có được trải nghiệm thành viên đầy đủ

Tham gia miễn phí

Trong hướng dẫn này, hãy phân tích tính năng ít được sử dụng nhất nhưng lại mạnh mẽ nhất của Selenium WebDriver. Vâng, tôi sẽ thảo luận về trình thực thi JavaScript và chỉ cho bạn một số cách khác nhau để thực thi các câu lệnh JavaScript thông qua Python Selenium WebDriver

Có thể xảy ra trường hợp trong một số dự án thời gian thực, Selenium WebDriver không thể thực hiện tác vụ trên một phần tử web cụ thể. Ví dụ: vì WebDriver mô phỏng tương tác của người dùng cuối nên đương nhiên là nó sẽ từ chối nhấp vào phần tử mà người dùng cuối không nhìn thấy [đôi khi điều này cũng xảy ra ngay cả khi phần tử web hiển thị trên trang]. Có thể có một số lý do hoặc tình huống tương tự khác

Trong những trường hợp này, chúng tôi có thể dựa vào JavaScript để nhấp hoặc thực hiện các hành động trên phần tử web đó và các câu lệnh JavaScript này có thể được thực thi thông qua WebDriver

Bạn có thể làm mọi thứ mà giao diện WebElement làm và hơn thế nữa với JavaScript

JavaScript là gì?

JavaScript là ngôn ngữ kịch bản chạy ở phía máy khách, tôi. e, trên trình duyệt và thực hiện một số điều kỳ diệu khi bạn lướt qua các trang web. Để biết thêm chi tiết, hãy tìm kiếm từ khóa "JavaScript" trên DZone

Chúng tôi sử dụng JavaScript trong WebDriver như thế nào?

Python Selenium WebDriver cung cấp một phương thức tích hợp sẵn

driver.execute_script["some javascript code here"];


Có hai cách chúng ta có thể thực thi JavaScript trong trình duyệt

Phương pháp 1. Thực thi JavaScript ở cấp gốc tài liệu

Trong trường hợp này, chúng tôi nắm bắt phần tử mà chúng tôi muốn làm việc bằng cách sử dụng các phương thức do JavaScript cung cấp, sau đó khai báo một số hành động trên phần tử đó và thực thi JavaScript này bằng WebDriver

Thí dụ

javaScript = "document.getElementsByName['username'][0].click[];"
driver.execute_script[javaScript]


Chúng tôi đang làm gì ở đây?

Bước 1. Chúng tôi đang kiểm tra và tìm nạp phần tử theo 'tên' thuộc tính bằng JavaScript. [Ngoài ra, các thuộc tính 'id' và 'class' có thể được sử dụng. ]

Bước 2. Khai báo và thực hiện hành động nhấp chuột trên một phần tử bằng JavaScript

Bước 3. Gọi phương thức exec_script[] và truyền JavaScript mà chúng ta đã tạo dưới dạng giá trị chuỗi

Thông báo 

javaScript = "document.getElementsByName['username'][0].click[];"
driver.execute_script[javaScript]
3     trong câu 
javaScript = "document.getElementsByName['username'][0].click[];"
driver.execute_script[javaScript]
4    ở trên. Các hàm JavaScript 
javaScript = "document.getElementsByName['username'][0].click[];"
driver.execute_script[javaScript]
5   ,  
javaScript = "document.getElementsByName['username'][0].click[];"
driver.execute_script[javaScript]
6   , v.v. trả về tất cả các phần tử phù hợp như . Trong trường hợp của chúng tôi, chúng tôi cần hành động trên phần tử phù hợp đầu tiên có thể được truy cập thông qua  
javaScript = "document.getElementsByName['username'][0].click[];"
driver.execute_script[javaScript]
7   . Nếu bạn biết những gì bạn đang làm, tôi. e. , nếu bạn biết chỉ mục của phần tử bạn muốn thao tác, bạn có thể trực tiếp sử dụng chỉ mục, chẳng hạn như  
javaScript = "document.getElementsByName['username'][0].click[];"
driver.execute_script[javaScript]
8   .

Tuy nhiên, nếu bạn đang sử dụng hàm JavaScript ' 

javaScript = "document.getElementsByName['username'][0].click[];"
driver.execute_script[javaScript]
9   ', thì bạn không cần sử dụng bất kỳ chỉ mục nào vì nó sẽ chỉ trả về .

Trong khi thực thi, WebDriver sẽ đưa câu lệnh JavaScript vào trình duyệt và tập lệnh sẽ thực hiện công việc. Trong ví dụ của chúng tôi, nó thực hiện thao tác nhấp chuột trên phần tử đích. JavaScript này có không gian tên riêng và không can thiệp vào JavaScript trong trang web thực tế

Phương pháp 2. Thực thi JavaScript ở cấp phần tử

Trong trường hợp này, chúng tôi nắm bắt phần tử mà chúng tôi muốn làm việc bằng cách sử dụng WebDriver, sau đó chúng tôi khai báo một số hành động trên phần tử đó bằng JavaScript và thực thi JavaScript này bằng cách sử dụng WebDriver bằng cách chuyển phần tử web làm đối số cho JavaScript

Điều này có khó hiểu không?

Ví dụ

userName = driver.find_element_by_xpath["//button[@name='username']"]
driver.execute_script["arguments[0].click[];", userName]


Chúng tôi đang làm gì ở đây?

Bước 1. Kiểm tra và nắm bắt phần tử bằng các phương thức do WebDriver cung cấp như '  

userName = driver.find_element_by_xpath["//button[@name='username']"]
driver.execute_script["arguments[0].click[];", userName]
0   '.

javaScript = "document.getElementsByName['username'][0].click[];"
driver.execute_script[javaScript]
1


Bước 2. Khai báo và thực hiện hành động nhấp chuột trên phần tử bằng JavaScript

javaScript = "document.getElementsByName['username'][0].click[];"
driver.execute_script[javaScript]
2


Bước 3. Gọi phương thức 

userName = driver.find_element_by_xpath["//button[@name='username']"]
driver.execute_script["arguments[0].click[];", userName]
1     với câu lệnh JavaScript mà chúng ta đã tạo dưới dạng giá trị chuỗi và phần tử web được ghi lại bằng cách sử dụng WebDriver làm đối số.

javaScript = "document.getElementsByName['username'][0].click[];"
driver.execute_script[javaScript]
4


Hai dòng mã trên có thể được rút ngắn thành định dạng bên dưới, nơi chúng tôi tìm thấy một phần tử bằng WebDriver, khai báo một số hàm JavaScript và thực thi JavaScript bằng WebDriver

javaScript = "document.getElementsByName['username'][0].click[];"
driver.execute_script[javaScript]
5


Một vấn đề khác gặp phải thường xuyên hơn là nhu cầu cuộn xuống cuối trang web. Bạn có thể thực hiện thao tác này trong một dòng mã

javaScript = "document.getElementsByName['username'][0].click[];"
driver.execute_script[javaScript]
6


Ngoài ra, bạn có thể có nhiều hơn một hành động JavaScript trong câu lệnh của mình

Ví dụ

javaScript = "document.getElementsByName['username'][0].click[];"
driver.execute_script[javaScript]
7


Trong trường hợp này, việc sử dụng thứ tự các phần tử web rất quan trọng. Truy cập 

userName = driver.find_element_by_xpath["//button[@name='username']"]
driver.execute_script["arguments[0].click[];", userName]
2   với 
javaScript = "document.getElementsByName['username'][0].click[];"
driver.execute_script[javaScript]
3     bất kỳ đâu trong câu lệnh JavaScript sẽ truy xuất trang web đầu tiên .

javaScript = "document.getElementsByName['username'][0].click[];"
driver.execute_script[javaScript]
0


Cách trả về giá trị

Một khía cạnh quan trọng khác của trình thực thi JavaScript là nó có thể được sử dụng để tìm nạp các giá trị từ các phần tử web. Điều đó có nghĩa là phương thức  

userName = driver.find_element_by_xpath["//button[@name='username']"]
driver.execute_script["arguments[0].click[];", userName]
1   có thể trả về giá trị.

Ví dụ

javaScript = "document.getElementsByName['username'][0].click[];"
driver.execute_script[javaScript]
0


Lưu ý rằng nếu bạn muốn thứ gì đó được mã JavaScript trả về, bạn cần sử dụng return. Ngoài ra, các phần tử có thể được định vị bằng Selenium và được chuyển vào tập lệnh

Điều gì xảy ra khi một phần tử không được tìm thấy?

Khi JavaScript không thể tìm thấy một phần tử để hoạt động, nó sẽ đưa ra một ngoại lệ WebDriver với thông báo lỗi tương ứng

Kịch bản 1. Chúng tôi đang cố gắng đọc thuộc tính bằng cách sử dụng ' 

userName = driver.find_element_by_xpath["//button[@name='username']"]
driver.execute_script["arguments[0].click[];", userName]
5   ' nhưng không có phần tử nào như vậy trên trang web. Chúng tôi nhận được thông báo sau trong dấu vết ngoại lệ.

javaScript = "document.getElementsByName['username'][0].click[];"
driver.execute_script[javaScript]
1


Kịch bản 2. Chúng tôi đang cố gắng sử dụng tên hàm báo lỗi hoặc thao tác không hợp lệ bên trong JavaScript, chẳng hạn như ' 

userName = driver.find_element_by_xpath["//button[@name='username']"]
driver.execute_script["arguments[0].click[];", userName]
6   '. [Lưu ý lỗi chính tả trong 
userName = driver.find_element_by_xpath["//button[@name='username']"]
driver.execute_script["arguments[0].click[];", userName]
7   tên phương thức. ]

javaScript = "document.getElementsByName['username'][0].click[];"
driver.execute_script[javaScript]
2

Tóm lược

Dưới đây là tóm tắt về một vài hành động tiềm năng mà JavaScript có thể được sử dụng

  • lấy phần tử văn bản hoặc thuộc tính

  • tìm một phần tử

  • thực hiện một số thao tác trên một phần tử, chẳng hạn như 

    userName = driver.find_element_by_xpath["//button[@name='username']"]
    driver.execute_script["arguments[0].click[];", userName]
    7    

  • thay đổi thuộc tính của một phần tử

  • cuộn đến một phần tử hoặc vị trí trên trang web

  • đợi cho đến khi trang được tải

Kiến thức cơ bản về JavaScript giúp ích rất nhiều khi xử lý DOM với Selenium. Bạn có thể tìm thêm chi tiết và bài viết trên trang web allselenium

Làm cách nào để nhấp vào nút javascript trong Selenium Python?

Thực thi javascript ở mức phần tử. Trong quá trình này, chúng tôi sẽ xác định phần tử với sự trợ giúp của các phương thức trình điều khiển web như find_element_by_xpath hoặc find_element_by_id, v.v. Sau đó thực hiện hành động cần thiết trên phần tử đó như nhấp vào phần tử . Cuối cùng, phương thức exec_script[] được gọi.

Làm cách nào để chạy javascript trong Selenium Python?

Chúng tôi có thể chạy Javascript trong Selenium webdriver với Python. Mô hình đối tượng tài liệu giao tiếp với các thành phần trên trang với sự trợ giúp của Javascript. Selenium thực thi các lệnh Javascript bằng cách sử dụng sự trợ giúp của phương thức exec_script . Các lệnh được thực thi được truyền dưới dạng đối số cho phương thức.

Làm cách nào để nhấp vào title trong Selenium webdriver Python?

Chúng ta có thể nhấp vào nút bằng trình quản trị web Selenium trong Python bằng cách sử dụng phương thức nhấp chuột . Trước tiên, chúng tôi phải xác định nút sẽ được nhấp với sự trợ giúp của bất kỳ bộ định vị nào như id, tên, lớp, xpath, tên thẻ hoặc css. Sau đó, chúng ta phải áp dụng phương pháp nhấp vào nó. Một nút trong mã html được đại diện bởi tên thẻ nút.

Làm cách nào để nhấp vào nút javascript trong Selenium java?

Nhấp vào một phần tử bằng JavaScript . Nhưng trong một số trường hợp, hành động nhấp chuột không thể thực hiện được. Một ví dụ là nếu chúng ta muốn nhấp vào một phần tử bị vô hiệu hóa. Trong trường hợp đó, WebElement#click ném ra một IllegalStateException. WebElement#click method that invokes a click event on a given element. But in some cases click action is not possible. One example is if we want to click a disabled element. In that case, WebElement#click throws an IllegalStateException.

Chủ Đề