Jump to content
Đăng nhập để theo dõi  
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 :

Chưa rõ lắm nên cứ để đấy đã.

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

Phần 2 : thay proxy hoặc sock cho Chrome hoặc FireFox

Nhân tiện có làm cái tools đi dạo :") nên tớ hướng dẫn thêm phần này cho các bạn. Ban đầu tớ cứ nghĩ là các trình duyệt sẽ code mẫu giống nhau, nhưng bắt tay vào thì mới thấy nó khác :a35:

2.1 Add Proxy hoặc Sock cho Chrome ( đơn giản thì ta làm trước ):

Code mẫu, các bạn chỉ cần thế proxy hoặc sock vào là được

Nội dung ẩn

    Bạn cần Reaction hoặc trả lời chủ đề này để thấy nội dung bị ẩn.

2.2 Add Proxy hoặc Sock cho FireFox :

Nội dung ẩn

    Bạn cần Reaction hoặc trả lời chủ đề này để thấy nội dung bị ẩn.
 

Phần 3 : Add cookie trong Selenium

Các bạn làm theo mẫu sau nhé :

Nội dung ẩn

    Bạn cần Reaction hoặc trả lời chủ đề này để thấy nội dung bị ẩn.

  • Like 6
  • Yêu thích 1

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

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.

Đăng nhập để theo dõi  

×
×
  • Create New...