Jump to content
  • 0
Đỗ Kim Khánh

Cách chia browser của Selenium với CSharp

Câu hỏi

Chào mọi người ạ, em đang làm việc với Selenium, nhưng hiện tại em đang bị vướng mắc ở khúc chia tỉ lệ màn hình rồi đưa browser vào, ở đây em sử dụng Chrome ạ.

Em muốn hỏi có cách nào để chia được Chrome ra thành các cửa sổ nhỏ như này và tự vừa với màn hình không ạ? Vd chọn là chia 3 thì nó sẽ như hình, còn chia 6 thì sẽ nhỏ hơn và chia thành 6 Chrome ấy ạ :c11:

Em cảm ơn mọi người ạ!

 

spacer.png

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


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

Recommended Posts

  • 0
3 giờ trước, Thiên Chi Kiều Nữ said:

Màn hình của bạn bé, bạn chia ra nhiều thì nó phải bé thôi :167788263418460:... code bạn như tnay thì chỉ mới làm được 1 hàng thôi..

Ví dụ màn hình của bạn có độ dài : WxH là 1920x1080 nhé, bạn muốn mở 3 cái chrome lên thì mỗi chrome sẽ có width = 1920/3 = 640, Height = 1080 :v ..

Code bạn nhìn qua mỵ thấy cũng đúng đúng rồi, chứ bạn muốn chia ra như thế nào ???

Nhưng mà em đang muốn lúc mở lên nó chia xong nó xếp hàng đều ra như ảnh lúc đầu ấy ạ, còn đây lúc em khởi động thì nó xếp đè lên nhau ở một góc rồi ạ.

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


Link tới bài viết
Share on other sites
  • 0
2 giờ trước, Đỗ Kim Khánh said:

Chào mọi người ạ, em đang làm việc với Selenium, nhưng hiện tại em đang bị vướng mắc ở khúc chia tỉ lệ màn hình rồi đưa browser vào, ở đây em sử dụng Chrome ạ.

Em muốn hỏi có cách nào để chia được Chrome ra thành các cửa sổ nhỏ như này và tự vừa với màn hình không ạ? Vd chọn là chia 3 thì nó sẽ như hình, còn chia 6 thì sẽ nhỏ hơn và chia thành 6 Chrome ấy ạ :c11:

Em cảm ơn mọi người ạ!

 

spacer.png

bạn lấy kích thước màn vi tính rồi chia số lượng chrome bạn mở lên thì ra width của từng chrome, đơn giản mà..

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


Link tới bài viết
Share on other sites
  • 0
On 29/10/2020 at 00:32, Admin said:

bạn lấy kích thước màn vi tính rồi chia số lượng chrome bạn mở lên thì ra width của từng chrome, đơn giản mà..

Em có thử rồi ạ nhưng không được, Ad giúp em với ạ @@ 

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


Link tới bài viết
Share on other sites
  • 0
9 giờ trước, Đỗ Kim Khánh said:

Em có thử rồi ạ nhưng không được, Ad giúp em với ạ @@ 

bạn đăng code lên mọi người mới fix cho bạn được chứ =.='', mọi người làm sắp xếp ầm ầm mà :167788263418460:

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


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

Đây ạ, em  sử dụng code như này, sau khi get W và H của màn hình thì chia cho số Chrome muốn mở để tạo ra các cửa sổ Chrome xếp liên tiếp vào nhau ạ nhưng mà hình như nó lấy kích cỡ màn hình xong chia ra thì các cửa sổ Chrome có vẻ hơi bé ạ... :c18:

using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace ChiaManHinhChrome
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            Control.CheckForIllegalCrossThreadCalls = false;
        }

        void OpenChrome(int sW, int sH)
        {
            IWebDriver web = null;
            ChromeDriverService service = ChromeDriverService.CreateDefaultService();
            service.HideCommandPromptWindow = true;

            ChromeOptions options = new ChromeOptions();
            options.AddArgument($"--window-size=" + sW + "," + sH);

            web = new ChromeDriver(service, options);

            web.Navigate().GoToUrl("https://teamcodedao.com/");
        }

        private void button1_Click(object sender, EventArgs e)
        {
            var screen = System.Windows.Forms.Screen.PrimaryScreen.Bounds;
            var W = screen.Width / Convert.ToInt32(numericUpDown1.Value);
            var H = screen.Height / Convert.ToInt32(numericUpDown1.Value);

            for (int i = 0; i < numericUpDown1.Value; i++)
            {
                Thread t = new Thread(() =>
                {
                    OpenChrome(W, H);
                });
                t.Start();
            }
        }
    }
}

 

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


Link tới bài viết
Share on other sites
  • 0
34 phút trước, Đỗ Kim Khánh said:

Đây ạ, em  sử dụng code như này, sau khi get W và H của màn hình thì chia cho số Chrome muốn mở để tạo ra các cửa sổ Chrome xếp liên tiếp vào nhau ạ nhưng mà hình như nó lấy kích cỡ màn hình xong chia ra thì các cửa sổ Chrome có vẻ hơi bé ạ... :c18:


using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace ChiaManHinhChrome
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            Control.CheckForIllegalCrossThreadCalls = false;
        }

        void OpenChrome(int sW, int sH)
        {
            IWebDriver web = null;
            ChromeDriverService service = ChromeDriverService.CreateDefaultService();
            service.HideCommandPromptWindow = true;

            ChromeOptions options = new ChromeOptions();
            options.AddArgument($"--window-size=" + sW + "," + sH);

            web = new ChromeDriver(service, options);

            web.Navigate().GoToUrl("https://teamcodedao.com/");
        }

        private void button1_Click(object sender, EventArgs e)
        {
            var screen = System.Windows.Forms.Screen.PrimaryScreen.Bounds;
            var W = screen.Width / Convert.ToInt32(numericUpDown1.Value);
            var H = screen.Height / Convert.ToInt32(numericUpDown1.Value);

            for (int i = 0; i < numericUpDown1.Value; i++)
            {
                Thread t = new Thread(() =>
                {
                    OpenChrome(W, H);
                });
                t.Start();
            }
        }
    }
}

 

Màn hình của bạn bé, bạn chia ra nhiều thì nó phải bé thôi :167788263418460:... code bạn như tnay thì chỉ mới làm được 1 hàng thôi..

Ví dụ màn hình của bạn có độ dài : WxH là 1920x1080 nhé, bạn muốn mở 3 cái chrome lên thì mỗi chrome sẽ có width = 1920/3 = 640, Height = 1080 :v ..

Code bạn nhìn qua mỵ thấy cũng đúng đúng rồi, chứ bạn muốn chia ra như thế nào ???

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


Link tới bài viết
Share on other sites
  • 0
17 phút trước, Đỗ Kim Khánh said:

Nhưng mà em đang muốn lúc mở lên nó chia xong nó xếp hàng đều ra như ảnh lúc đầu ấy ạ, còn đây lúc em khởi động thì nó xếp đè lên nhau ở một góc rồi ạ.

à, đúng rồi,, bị đè do bạn chưa set position cho nó =.='' ....tạm thời bạn search google set position nhé, đêm mỵ về mỵ up code cho =.=''

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


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

E có sợt Google thì tạo ra được Position, vậy đoạn code của em như sau ạ, nhưng vẫn có điều là nếu chạy 1 luồng thì sắp xếp theo ý ạ nhưng chạy đa luông là nó nhảy lung tung trên màn hình không sắp xếp đúng theo ý ạ :( 

 

using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace ChiaManHinhChrome
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            Control.CheckForIllegalCrossThreadCalls = false;
        }

        void OpenChrome(int i, int j)
        {
            IWebDriver web = null;
            ChromeDriverService service = ChromeDriverService.CreateDefaultService();
            service.HideCommandPromptWindow = true;

            ChromeOptions options = new ChromeOptions();
            //options.AddArgument($"--window-size=" + sW + "," + sH);
            options.AddArgument($"--window-size=300,350");

            web = new ChromeDriver(service, options);
            web.Manage().Window.Position = new Point(0 + 300 * i, 0 + 350 * j);

            string url = "https://www.google.com/";
            web.Navigate().GoToUrl(url);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            for(int j = 0; j < 1; j++)
            {
                for (int i = 0; i < numericUpDown1.Value; i++)
                {
                    //Thread t = new Thread(() =>
                    //{
                        OpenChrome(i, j);
                    //});
                    //t.Start();
                }
            }
            
        }
    }
}

Không biết em sai chỗ nào ạ, vì hiện tại em muốn làm đa luồng ạ.

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


Link tới bài viết
Share on other sites
  • 0
16 giờ trước, Đỗ Kim Khánh said:

E có sợt Google thì tạo ra được Position, vậy đoạn code của em như sau ạ, nhưng vẫn có điều là nếu chạy 1 luồng thì sắp xếp theo ý ạ nhưng chạy đa luông là nó nhảy lung tung trên màn hình không sắp xếp đúng theo ý ạ :( 

 


using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace ChiaManHinhChrome
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            Control.CheckForIllegalCrossThreadCalls = false;
        }

        void OpenChrome(int i, int j)
        {
            IWebDriver web = null;
            ChromeDriverService service = ChromeDriverService.CreateDefaultService();
            service.HideCommandPromptWindow = true;

            ChromeOptions options = new ChromeOptions();
            //options.AddArgument($"--window-size=" + sW + "," + sH);
            options.AddArgument($"--window-size=300,350");

            web = new ChromeDriver(service, options);
            web.Manage().Window.Position = new Point(0 + 300 * i, 0 + 350 * j);

            string url = "https://www.google.com/";
            web.Navigate().GoToUrl(url);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            for(int j = 0; j < 1; j++)
            {
                for (int i = 0; i < numericUpDown1.Value; i++)
                {
                    //Thread t = new Thread(() =>
                    //{
                        OpenChrome(i, j);
                    //});
                    //t.Start();
                }
            }
            
        }
    }
}

Không biết em sai chỗ nào ạ, vì hiện tại em muốn làm đa luồng ạ.

Của bạn gần đúng rồi :) code bạn sửa lại 1 chút là được như thế này :

Đoạn multipe thread :

 for (int j = 0; j < 1; j++)
            {
                for (int i = 0; i < 3; i++)
                {
                    int SoChorme = i;
                    Thread t = new Thread(() =>
                    {
                        OpenChrome(SoChorme, j);
                    });
                    t.Start();
                }
            }

Đoạn mở chrome :

void OpenChrome(int SoChorme, int j)
{
  ChromeDriverService service = ChromeDriverService.CreateDefaultService();
  service.HideCommandPromptWindow = true;

  ChromeOptions options = new ChromeOptions();
  //options.AddArgument($"--window-size=" + sW + "," + sH);
  options.AddArgument($"--window-size=300,350");
  IWebDriver web = new ChromeDriver(service, options);
  web.Manage().Window.Position = new Point(350 * SoChorme, 0); //Tham số bạn tự điều chỉnh cho phù hợp
  string url = "https://www.google.com/";
  web.Navigate().GoToUrl(url);
}

 

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


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

Em cảm ơn chị ạ, nhưng mà nếu em chọn số luồng lớn hơn 3 thì nó sẽ tạo ra Chrome và sắp xếp tiếp ra tận ngoài màn hình chứ không xuống dòng ạ @@ Chị có cách nào khắc phục không ạ? Em cảm ơn ạ :3 :c18:

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


Link tới bài viết
Share on other sites
  • 0
4 giờ trước, Đỗ Kim Khánh said:

Em cảm ơn chị ạ, nhưng mà nếu em chọn số luồng lớn hơn 3 thì nó sẽ tạo ra Chrome và sắp xếp tiếp ra tận ngoài màn hình chứ không xuống dòng ạ @@ Chị có cách nào khắc phục không ạ? Em cảm ơn ạ :3 :c18:

Cái này do bạn làm phép toán tự tìm ra công thức thì nó mới ra được chứ.

Ví dụ nhé : nếu bạn muốn xếp 3 cái trên 1 hàng
-> bạn muốn mở 6 cái thì được 2 hàng, mỗi hàng 3 cái. 
-> bạn muốn mở 9 cái thì được 3 hàng, mỗi hàng 3 cái.
-> bạn muốn mở 12 cái thì được 4 hàng, mỗi hàng 3 cái.

dựa vào đó thì công thức tổng quát của nó sẽ như thế nào ???? bạn thử cho mỵ đáp án đi rồi mỵ đưa lời giải cho :167788196751800:

Đáp án : yêu cầu bạn gửi lời giải của bạn lên nhé, không được xem trướ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.

  • Like 4
  • Sad 1
  • Yêu thích 2

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


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

Theo em nghĩ thì hôm nọ em có tìm được một cách, như code thứ 2 của em ý ạ là tạo thêm 1 biến j nữa để lưu dữ liệu của chiều cao, còn i thì lưu chiều dài, nếu chiều dài quá màn hình hoặc gần bằng màn hình thì xuống hàng... Không biết thế có đúng không ạ...

Edited by Đỗ Kim Khánh

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


Link tới bài viết
Share on other sites
  • 0
2 phút trước, Đỗ Kim Khánh said:

Theo em nghĩ thì hôm nọ em có tìm được một cách, như code thứ 2 của em ý ạ là tạo thêm 1 biến j nữa để lưu dữ liệu của chiều cao, còn i thì lưu chiều dài, nếu chiều dài quá màn hình hoặc gần bằng màn hình thì xuống hàng... Không biết thế có đúng không ạ...

bạn phải đăng code lên chứ =.=''.....mỵ đọc hiểu là được, để giải thích thì lan man lắm... :167788223418464:

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 câu hỏi 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...