Jump to content
Admin

Hướng dẫn sử dụng thư viện Selenium với CSharp

Recommended Posts

Xin chào các bạn ! Hôm nay mình nhận được một người đặt tools thao tác tự động với web, mình cũng có tìm hiểu qua trước đây rồi, nhưng chả biết gì cả, giờ vọc lại cũng vọc vạch được 1 tí, gọi là hướng dẫn cho các bạn nào mở đầu mới vào đỡ mất công tìm kiếm.

Đồ nghề : Visual studio 2017 bản nào cũng được ( community,pro,enterprise ) thế thôi, à còn mạng internet nữa


Bước 1 : Tạo winform mới nhé, rồi tạo 1 button để click cho nó dễ.

Bước 2 : Nhấn chuột phải vào tên Project, chọn Manage Nuget Package... -> chọn Borrows -> gõ tên Selenium . Các bạn cần tải về những gì ?
- Thư viện Selenium.Webdriver ( bắt buộc )
- Nếu bạn dùng Chrome thì tải : Selenium.Chrome.Webdriver
- Nếu bạn dùng Firefox thì tải : Selenium.Firefox.Webdriver

Bước 3 : Sử dụng thư viện Selenium bằng cách thêm 4 dòng này lên trên cùng, ở đây mình ví dụ với Browser Chrome nhoé (tương tự với Firefox ?

using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Interactions;
using OpenQA.Selenium.Support.UI;

Bước 4 : Rồi bắt tay làm nào . Hàm khởi tạo trước nhé :

IWebDriver driver = new ChromeDriver();

Giờ đến tác dụng của các command :

1.Muốn mở một trang web, ta dùng lệnh này :

driver.Url="https://www.google.com.vn";

2. Muốn lấy sources của trang web, ta dùng lệnh này :

string Sources = driver.PageSources;

3. Muốn đợi 1 element nào đó xuất hiện :

WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
wait.Until(d => d.FindElement(By.Id("element nào đó")));

4. Muốn tác động vào 1 element nào đó, trước hết ta phải xem element đó nằm trong các thẻ nào, ở đây tớ sẽ lấy trang google làm mẫu nhoé. Sau khi sử dụng command ở 1. ta vào trang google nhấn F12 vào ô tìm kiếm Google,ở đây ta thấy có 3 cái attribute có thể lấy để tác động điền chữ vào ô tìm kiếm :

Google Sources


Ví dụ 1 : tác động bằng ID :

driver.FindElement(By.Id("lst-ib")).SendKeys("từ muốn điền");

Ví dụ 2 : tác động qua Class :

driver.FindElement(By.ClassName("lst-ib")).SendKeys("từ muốn điền");

Ví dụ 3 : tác động qua Name :

driver.FindElement(By.Name("lst-ib")).SendKeys("từ muốn điền");

Ví dụ 4 : tác động qua TagName :

driver.FindElements(By.TagName("a")) //Tag ở đây chính là tag ở đầu < . ví dụ <a href="https://www.teamcodedao.com">Home Page</a> thì ở đây là tag a

5. Viết được từ cần viết vào ô rồi, vậy giờ mình muốn bấm vào nút tìm kiếm thì phải làm như thế nào ? À thì lại tưởng tự, ta tìm tới element có thể tác động được, lại F12 với chữ "Tìm với Google" với trang google tiếp ta thấy như hình dưới :

Google Bug

Ta lại thấy xuất hiện attribute Name có thể tác động. Okemen, ta làm như sau :

driver.FindElement(By.Name("btnK")).Submit();

Ở đây ta có 2 cách, 1 là submit, 2 là click, tác dụng như nhau thôi ? đều nhấn chuột vào cái button "Tìm với Google".

6. Bạn muốn thay đổi Profile ? No problem, chúng ta code như sau :

ChromeOptions ChOpt = new ChromeOptions();
ChOpt.AddArgument("--profile-directory=Tên profile bạn cần");
ChOpt.AddArgument("--user-data-dir=C:\Users\Tên máy tính của bạn\AppData\Local\Google\Chrome\User Data"); //<< cái này tớ sử dụng Path mặc định của chrome, các bạn thay đổi nếu bạn đã thay đổi chỗ để profile
IWebDriver driver = new ChromeDriver(ChOpt);

Xong rất đơn giản phải không, nhưng đéo nói thì đéo ai biết cả ? ..

7. Một khi đã quá thuần thục và quen thuộc với Selenium, bạn lại muốn tắt cmn cái cửa sổ cmd đen xì đáng ghét ? mà đến giờ vẫn chưa biết làm cách nào ?? Hãy làm như bên dưới đây :

ChromeDriverService Cds = ChromeDriverService.CreateDefaultService();
Cds.HideCommandPromptWindow = true;
ChromeOptions ChOpt = new ChromeOptions();
ChOpt.AddArgument("--profile-directory=Tên profile bạn cần");
string PathMacDinh = Environment.ExpandEnvironmentVariables("%LOCALAPPDATA%\\Google\\Chrome\\User Data\\");
//ChOpt.AddArgument("--user-data-dir=C:\Users\Tên máy tính của bạn\AppData\Local\Google\Chrome\User Data"); //<< cái này tớ sử dụng Path mặc định của chrome, các bạn thay đổi nếu bạn đã thay đổi chỗ để profile
ChOpt.AddArgument("--user-data-dir=" + PathMacDinh);
IWebDriver driver = new ChromeDriver(Cds,ChOpt);

Xong, các bạn nhấn F5 ngồi xem xem nó ra cái profile nào ? .

8. Chạy trực tiếp JS trên Browser , Selenium thật bá đạo :")

string javaScript = "var evObj = document.createEvent('MouseEvents');"+
"evObj.initMouseEvent(\"mouseover\",true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);"+
"arguments[0].dispatchEvent(evObj);";
IJavaScriptExecutor executor = driver as IJavaScriptExecutor;
executor.ExecuteScript(javaScript, webElement);
---------------------------------------------------------------------------------------------------------------------
(IWebElement) ((IJavaScriptExecutor)driver).ExecuteScript("return $('.cheese')[0]");
---------------------------------------------------------------------------------------------------------------------
IList labels = driver.FindElements(By.TagName("label"));
IList inputs = (IList) ((IJavaScriptExecutor)driver).ExecuteScript( "var labels = arguments[0], inputs = []; for (var i=0; i < labels.length; i++)
{" + "inputs.push(document.getElementById(labels.getAttribute('for'))); } return inputs;", labels);

Trên đây là các bước khá cơ bản, đủ để bạn thao tác làm 1 kich bản nhè nhẹ với 1 số trang web rồi . Tớ sẽ cập nhật thêm. Cám ơn các bạn đã theo dõi.

Chia sẻ bài đăng này


Link tới bài viết
Share on other sites

Cám ơn ad, bài viết rất hay.

DevTools listening on ws://127.0.0.1:63031/devtools/browser/970575f0-e6aa-4fea-86d3-4f97928dd14b
[1559829724.929][WARNING]: Timed out connecting to Chrome, retrying...

Mình bị lỗi vậy là bị sao vậy ad ơi

Chia sẻ bài đăng này


Link tới bài viết
Share on other sites
1 giờ trước, Cường Đỗ said:

Cám ơn ad, bài viết rất hay.

DevTools listening on ws://127.0.0.1:63031/devtools/browser/970575f0-e6aa-4fea-86d3-4f97928dd14b
[1559829724.929][WARNING]: Timed out connecting to Chrome, retrying...

Mình bị lỗi vậy là bị sao vậy ad ơi

bạn phải đưa code lên mình mới biết chứ :| còn lỗi kia nó thông báo là không kết nối đc tới chrome :v đang thử lại.. 

Chia sẻ bài đăng này


Link tới bài viết
Share on other sites

Rất hay, mình trước toàn phải mò mấy trang nước ngoài về thằng này giờ mới thấy bài tiếng việt chất lượng. anh em nào cần hỗ trợ inbox mình hỗ trợ nhiệt tình auto này nhé. skype hungvt216

Chia sẻ bài đăng này


Link tới bài viết
Share on other sites

Cho e hỏi e muốn thao trực tiếp trên browser đang bật thì có đc k ạ . Hay bắt buộc phải bật trình duyệt khác lên ạ . tại e muốn sử dụng trên nhiều user trên chrome

 

Chia sẻ bài đăng này


Link tới bài viết
Share on other sites
30 phút trước, NamAnh said:

Cho e hỏi e muốn thao trực tiếp trên browser đang bật thì có đc k ạ . Hay bắt buộc phải bật trình duyệt khác lên ạ . tại e muốn sử dụng trên nhiều user trên chrome

 

không bạn nhé, tất cả đều phải chạy từ 1 chrome do phần mềm mở mới thao tác được..

Chia sẻ bài đăng này


Link tới bài viết
Share on other sites
On 4/12/2018 at 00:20, Admin said:

cám ơn bác với cho e hỏi làm sau mở đồng thời nhiều tab chorme cùng một lúc ạ, thank bác

 

Chia sẻ bài đăng này


Link tới bài viết
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Trả lời chủ đề này...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...