Example #1
0
        ///<summary>Inserts one JobLink into the database.  Provides option to use the existing priKey.</summary>
        public static long Insert(JobLink jobLink, bool useExistingPK)
        {
            if (!useExistingPK && PrefC.RandomKeys)
            {
                jobLink.JobLinkNum = ReplicationServers.GetKey("joblink", "JobLinkNum");
            }
            string command = "INSERT INTO joblink (";

            if (useExistingPK || PrefC.RandomKeys)
            {
                command += "JobLinkNum,";
            }
            command += "JobNum,FKey,LinkType,Tag,DisplayOverride) VALUES(";
            if (useExistingPK || PrefC.RandomKeys)
            {
                command += POut.Long(jobLink.JobLinkNum) + ",";
            }
            command +=
                POut.Long(jobLink.JobNum) + ","
                + POut.Long(jobLink.FKey) + ","
                + POut.Int((int)jobLink.LinkType) + ","
                + "'" + POut.String(jobLink.Tag) + "',"
                + "'" + POut.String(jobLink.DisplayOverride) + "')";
            if (useExistingPK || PrefC.RandomKeys)
            {
                Db.NonQ(command);
            }
            else
            {
                jobLink.JobLinkNum = Db.NonQ(command, true, "JobLinkNum", "jobLink");
            }
            return(jobLink.JobLinkNum);
        }
Example #2
0
        ///<summary>Inserts one JobLink into the database.  Provides option to use the existing priKey.  Doesn't use the cache.</summary>
        public static long InsertNoCache(JobLink jobLink, bool useExistingPK)
        {
            bool   isRandomKeys = Prefs.GetBoolNoCache(PrefName.RandomPrimaryKeys);
            string command      = "INSERT INTO joblink (";

            if (!useExistingPK && isRandomKeys)
            {
                jobLink.JobLinkNum = ReplicationServers.GetKeyNoCache("joblink", "JobLinkNum");
            }
            if (isRandomKeys || useExistingPK)
            {
                command += "JobLinkNum,";
            }
            command += "JobNum,FKey,LinkType,Tag,DisplayOverride) VALUES(";
            if (isRandomKeys || useExistingPK)
            {
                command += POut.Long(jobLink.JobLinkNum) + ",";
            }
            command +=
                POut.Long(jobLink.JobNum) + ","
                + POut.Long(jobLink.FKey) + ","
                + POut.Int((int)jobLink.LinkType) + ","
                + "'" + POut.String(jobLink.Tag) + "',"
                + "'" + POut.String(jobLink.DisplayOverride) + "')";
            if (useExistingPK || isRandomKeys)
            {
                Db.NonQ(command);
            }
            else
            {
                jobLink.JobLinkNum = Db.NonQ(command, true, "JobLinkNum", "jobLink");
            }
            return(jobLink.JobLinkNum);
        }
Example #3
0
 private void butAddViewJob_Click(object sender, EventArgs e)
 {
     if (_patCur == null)
     {
         return;
     }
     if (_listLinks.Count > 0)           //View Job
     {
         if (_listLinks.Count == 1)
         {
             JobLink link = _listLinks.First();
             FormOpenDental.S_GoToJob(link.JobNum);
         }
         else
         {
             MsgBox.Show(this, "Submission is associated to multiple jobs");
         }
         return;
     }
     _bug = BugSubmissionL.AddBugAndJob(this, new List <BugSubmission>()
     {
         _subCur
     }, _patCur);
     if (_bug == null)
     {
         return;
     }
     if (this.Modal)
     {
         DialogResult = DialogResult.OK;
     }
 }
Example #4
0
 ///<summary>Inserts one JobLink into the database.  Returns the new priKey.</summary>
 public static long Insert(JobLink jobLink)
 {
     if (DataConnection.DBtype == DatabaseType.Oracle)
     {
         jobLink.JobLinkNum = DbHelper.GetNextOracleKey("joblink", "JobLinkNum");
         int loopcount = 0;
         while (loopcount < 100)
         {
             try {
                 return(Insert(jobLink, true));
             }
             catch (Oracle.ManagedDataAccess.Client.OracleException ex) {
                 if (ex.Number == 1 && ex.Message.ToLower().Contains("unique constraint") && ex.Message.ToLower().Contains("violated"))
                 {
                     jobLink.JobLinkNum++;
                     loopcount++;
                 }
                 else
                 {
                     throw ex;
                 }
             }
         }
         throw new ApplicationException("Insert failed.  Could not generate primary key.");
     }
     else
     {
         return(Insert(jobLink, false));
     }
 }
Example #5
0
        private List <UngVien> XuLyCV(XBrowser browser, JobLink job)
        {
            job.trang_thai_xu_ly = TrangThaiXuLy.DA_XU_LY;

            List <UngVien> lst_ung_vien = new List <UngVien>();

            try
            {
                UngVien ung_vien = new UngVien();
                ung_vien.ngay_tao = ung_vien.ngay_sua = XUtil.TimeInEpoch(DateTime.Now);
                ung_vien.app_id   = job.app_id;
                ung_vien.job_link = job.link;
                ung_vien.vi_tri   = job.ten_job;

                ThongTinChungUngVien ttuv = new ThongTinChungUngVien();
                ttuv.domain = "https://careerbuilder.vn/";
                //ttuv.full_text = block_ung_vien.FindElement(By.XPath("//div[@class='Card__root ApplicationCard__root']")).;
                ung_vien.thong_tin_chung = ttuv;
                ung_vien.ho_ten          = browser.GetInnerText(".//div[@class='act_more']/a/b", 200);
                ung_vien.link_cv_online  = "";
                ung_vien.ky_nang         = "";
                ung_vien.hoc_van         = browser.GetInnerText(".//ul[@class='block_info bullet block01']/li[2]/div");

                //div[@class='info-list']/ul/li[1]
                ung_vien.ngay_sinh     = 0;
                ung_vien.so_dien_thoai = browser.GetInnerText(".//ul[@class='block_info block02']/li[1]/div");
                ung_vien.email         = browser.GetInnerText(".//ul[@class='block_info block02']/li[2]/div");
                ung_vien.dia_chi       = browser.GetInnerText(".//ul[@class='block_info block02']/li[3]/div");

                Uri uri = new Uri(job.link);
                ung_vien.domain = uri.Host;
                var id = string.Join("/", job.link.Split('/').Skip(5));
                //id = id.Substring(0, id.LastIndexOf('/'));
                ung_vien.custom_id = id;
                //Tai file
                var ifr = browser.FindFirst("//div[@id='tabs-chitiethoso']//iframe");
                if (ifr != null)
                {
                    ung_vien.link_cv_offline = browser.DownloadByBrowserInIFrame("//div[@id='tabs-chitiethoso']//iframe", "//button[@id='download']");
                    if (!string.IsNullOrEmpty(ung_vien.link_cv_offline))
                    {
                        ung_vien.cv_byte = File.ReadAllBytes($"{cv_save_path}\\{ung_vien.link_cv_offline}");
                    }
                }
                ung_vien.full_text = browser.GetPageSource();
                ung_vien.nguoi_tao = job.nguoi_tao;
                lst_ung_vien.Add(ung_vien);
                var count = lst_ung_vien.Count;
                System.Threading.Thread.Sleep(2000);
            }
            catch (Exception ex)
            {
                job.trang_thai_xu_ly = TrangThaiXuLy.LOI;
                job.thong_tin_xu_ly  = ex.Message;
            }
            job.ngay_xu_ly = XUtil.TimeInEpoch();

            return(lst_ung_vien);
        }
Example #6
0
        public List <JobLink> ExtractJobLink(CauHinh ch, string link, string app_id, out string msg)
        {
            is_authenticated = false;
            msg = "";
            List <JobLink> lst = new List <JobLink>();

            using (var browser = new XBrowser(user_profile_path, string.Empty, false, show_browser))
            {
                string url        = browser.GoTo(ch.url_login);
                string wait_xpath = ".//div[@class='kv_login']/div/span";
                System.Threading.Thread.Sleep(2000);
                var home = browser.GetUrl();
                if (browser.Find(wait_xpath).Count > 0)
                {
                    is_authenticated = true;
                }
                else
                {
                    is_authenticated = home == "https://careerbuilder.vn/vi/employers/hrcentral" || (link != url
                        ? browser.Login(ch.url_login, ch.username, ch.password, ch.xpath_username,
                                        ch.xpath_password, out msg, wait_xpath, false)
                        : browser.GetUrl().Contains(url));
                }

                if (is_authenticated)
                {
                    browser.GoTo(link);
                    System.Threading.Thread.Sleep(2000);
                    List <string> lst_links = new List <string>();

                    var ds_tin =
                        browser.Find(
                            "//div[@id='gird_standard']//dd//span[@class='rc_col_title3 info_jobseeker']/a[1]");

                    foreach (var tin in ds_tin)
                    {
                        var get_tin = browser.GetAttribute(tin, "href");
                        var ten_job = tin.Text;

                        if (!string.IsNullOrEmpty(get_tin))
                        {
                            JobLink job = new JobLink(LoaiLink.JOB_LINK)
                            {
                                app_id           = app_id,
                                link             = get_tin,
                                trang_thai       = TrangThai.DANG_SU_DUNG,
                                trang_thai_xu_ly = TrangThaiXuLy.CHUA_XU_LY,
                                nguoi_tao        = ch.username,
                                ten_job          = ten_job
                            };
                            lst.Add(job);
                        }
                    }
                }
            }
            return(lst);
        }
Example #7
0
        ///<summary>Updates one JobLink in the database.  Uses an old object to compare to, and only alters changed fields.  This prevents collisions and concurrency problems in heavily used tables.  Returns true if an update occurred.</summary>
        public static bool Update(JobLink jobLink, JobLink oldJobLink)
        {
            string command = "";

            if (jobLink.JobNum != oldJobLink.JobNum)
            {
                if (command != "")
                {
                    command += ",";
                }
                command += "JobNum = " + POut.Long(jobLink.JobNum) + "";
            }
            if (jobLink.FKey != oldJobLink.FKey)
            {
                if (command != "")
                {
                    command += ",";
                }
                command += "FKey = " + POut.Long(jobLink.FKey) + "";
            }
            if (jobLink.LinkType != oldJobLink.LinkType)
            {
                if (command != "")
                {
                    command += ",";
                }
                command += "LinkType = " + POut.Int((int)jobLink.LinkType) + "";
            }
            if (jobLink.Tag != oldJobLink.Tag)
            {
                if (command != "")
                {
                    command += ",";
                }
                command += "Tag = '" + POut.String(jobLink.Tag) + "'";
            }
            if (jobLink.DisplayOverride != oldJobLink.DisplayOverride)
            {
                if (command != "")
                {
                    command += ",";
                }
                command += "DisplayOverride = '" + POut.String(jobLink.DisplayOverride) + "'";
            }
            if (command == "")
            {
                return(false);
            }
            command = "UPDATE joblink SET " + command
                      + " WHERE JobLinkNum = " + POut.Long(jobLink.JobLinkNum);
            Db.NonQ(command);
            return(true);
        }
Example #8
0
        ///<summary>Updates one JobLink in the database.</summary>
        public static void Update(JobLink jobLink)
        {
            string command = "UPDATE joblink SET "
                             + "JobNum         =  " + POut.Long(jobLink.JobNum) + ", "
                             + "FKey           =  " + POut.Long(jobLink.FKey) + ", "
                             + "LinkType       =  " + POut.Int((int)jobLink.LinkType) + ", "
                             + "Tag            = '" + POut.String(jobLink.Tag) + "', "
                             + "DisplayOverride= '" + POut.String(jobLink.DisplayOverride) + "' "
                             + "WHERE JobLinkNum = " + POut.Long(jobLink.JobLinkNum);

            Db.NonQ(command);
        }
Example #9
0
        //public string Index(JobLink data)
        //{
        //    //data.link = "careerbuilder.vn";
        //    //data.trang_thai = TrangThai.DANG_SU_DUNG;
        //    //data.trang_thai_xu_ly = TrangThaiXuLy.DANG_XU_LY;
        //    //data.loai = LoaiLink.CONFIG;
        //    //data.app_id = "xmedia.vn";
        //    //data.json = new CauHinh()
        //    //{
        //    //    url_login = "******",
        //    //    xpath_username = "******",
        //    //    xpath_password = "******"
        //    //};

        //    return Index(_default_index, data);
        //}

        public bool Index(JobLink data)
        {
            //int retry = 0; int max_retry = 5;
            var req = new IndexRequest <JobLink>
            {
                Document = data
            };
            var re = client.Index <JobLink>(req);

            if (re.Result == Result.Created)
            {
                return(true);
            }
            return(false);
        }
Example #10
0
 ///<summary>Inserts one JobLink into the database.  Returns the new priKey.  Doesn't use the cache.</summary>
 public static long InsertNoCache(JobLink jobLink)
 {
     if (DataConnection.DBtype == DatabaseType.MySql)
     {
         return(InsertNoCache(jobLink, false));
     }
     else
     {
         if (DataConnection.DBtype == DatabaseType.Oracle)
         {
             jobLink.JobLinkNum = DbHelper.GetNextOracleKey("joblink", "JobLinkNum");                  //Cacheless method
         }
         return(InsertNoCache(jobLink, true));
     }
 }
Example #11
0
        public bool UpdateTrangThaiXuLy(JobLink job)
        {
            var job_link = new JobLink(LoaiLink.JOB_LINK);

            var re_u = client.Search <JobLink>(s => s.Query(q => q.Term(t => t.Field("link").Value(job.link))).Size(1));

            job_link    = re_u.Hits.First().Source;
            job_link.id = re_u.Hits.First().Id;
            if (re_u.Total > 0)
            {
                var re = client.Update <JobLink, object>(job_link.id, u => u.Doc(new { trang_thai_xu_ly = job.trang_thai_xu_ly, ngay_xu_ly = job.ngay_xu_ly, tong_so_cv = job.tong_so_cv }));
                return(re.Result == Result.Updated || re.Result == Result.Noop);
            }

            return(false);
        }
Example #12
0
        private bool AddBug()
        {
            FormBugSearch FormBS = new FormBugSearch(_jobNew);

            FormBS.ShowDialog();
            if (FormBS.DialogResult != DialogResult.OK || FormBS.BugCur == null)
            {
                return(false);
            }
            JobLink jobLink = new JobLink();

            jobLink.FKey     = FormBS.BugCur.BugId;
            jobLink.LinkType = JobLinkType.Bug;
            _listJobLinks.Add(jobLink);
            FillGridBugs();
            return(true);
        }
Example #13
0
        private void butLinkTask_Click(object sender, EventArgs e)
        {
            FormTaskSearch FormTS = new FormTaskSearch();

            FormTS.IsSelectionMode = true;
            if (FormTS.ShowDialog() == DialogResult.OK)
            {
                JobLink jobLink = new JobLink();
                jobLink.JobNum   = _jobNum;
                jobLink.FKey     = FormTS.SelectedTaskNum;
                jobLink.LinkType = JobLinkType.Task;
                JobLinks.Insert(jobLink);
                _jobLinks   = JobLinks.GetJobLinks(_jobNum);
                _hasChanged = true;
                FillGrid();
            }
        }
Example #14
0
        public List <JobLink> ExtractJobLink(CauHinh ch, string link, string app_id, out string msg)
        {
            is_authenticated = false;
            msg = "";
            List <JobLink> lst = new List <JobLink>();

            using (var browser = new XBrowser(user_profile_path, string.Empty, false, show_browser))
            {
                string url = browser.GoTo(link);

                string wait_xpath = ".//a[@data-test-key='accountMenuItem']";
                is_authenticated = link != url?browser.Login(ch.url_login, ch.username, ch.password, ch.xpath_username, ch.xpath_password, out msg, wait_xpath, false) : browser.GetUrl().Contains(url);

                if (is_authenticated)
                {
                    browser.GoTo(link);

                    var eles = browser.Find("//div[@class='Dashboard__dashboard']//a[@class='JobCard__clickable']");

                    if (eles != null)
                    {
                        foreach (var item in eles)
                        {
                            var url_tin = browser.GetAttribute(item, "href");
                            var ten_job = item.FindElement(By.XPath(".//strong[@class='BoldedText__regular JobCard__jobTitle']")).Text;

                            if (!string.IsNullOrEmpty(url_tin))
                            {
                                JobLink job = new JobLink(LoaiLink.JOB_LINK)
                                {
                                    app_id           = app_id,
                                    link             = url_tin,
                                    trang_thai       = TrangThai.DANG_SU_DUNG,
                                    trang_thai_xu_ly = TrangThaiXuLy.CHUA_XU_LY,
                                    nguoi_tao        = ch.username,
                                    ten_job          = ten_job
                                };
                                lst.Add(job);
                            }
                        }
                    }
                }
            }
            return(lst);
        }
Example #15
0
        private void gridCustomers_TitleAddClick(object sender, EventArgs e)
        {
            FormPatientSelect FormPS = new FormPatientSelect();

            FormPS.ShowDialog();
            if (FormPS.DialogResult != DialogResult.OK)
            {
                return;
            }
            JobLink jobLink = new JobLink()
            {
                FKey     = FormPS.SelectedPatNum,
                LinkType = JobLinkType.Customer
            };

            _listJobLinks.Add(jobLink);
            FillGridCustomers();
        }
Example #16
0
        ///<summary>Converts a DataTable to a list of objects.</summary>
        public static List <JobLink> TableToList(DataTable table)
        {
            List <JobLink> retVal = new List <JobLink>();
            JobLink        jobLink;

            foreach (DataRow row in table.Rows)
            {
                jobLink                 = new JobLink();
                jobLink.JobLinkNum      = PIn.Long(row["JobLinkNum"].ToString());
                jobLink.JobNum          = PIn.Long(row["JobNum"].ToString());
                jobLink.FKey            = PIn.Long(row["FKey"].ToString());
                jobLink.LinkType        = (OpenDentBusiness.JobLinkType)PIn.Int(row["LinkType"].ToString());
                jobLink.Tag             = PIn.String(row["Tag"].ToString());
                jobLink.DisplayOverride = PIn.String(row["DisplayOverride"].ToString());
                retVal.Add(jobLink);
            }
            return(retVal);
        }
Example #17
0
        private void butLinkFeatReq_Click(object sender, EventArgs e)
        {
            FormFeatureRequest FormFR = new FormFeatureRequest();

            FormFR.IsSelectionMode = true;
            FormFR.ShowDialog();
            if (FormFR.DialogResult == DialogResult.OK)
            {
                JobLink jobLink = new JobLink();
                jobLink.JobNum   = _jobNum;
                jobLink.FKey     = FormFR.SelectedFeatureNum;
                jobLink.LinkType = JobLinkType.Request;
                JobLinks.Insert(jobLink);
                _jobLinks   = JobLinks.GetJobLinks(_jobNum);
                _hasChanged = true;
                FillGrid();
            }
        }
Example #18
0
        private void gridTasks_TitleAddClick(object sender, EventArgs e)
        {
            FormTaskSearch FormTS = new FormTaskSearch()
            {
                IsSelectionMode = true
            };

            FormTS.ShowDialog();
            if (FormTS.DialogResult != DialogResult.OK)
            {
                return;
            }
            JobLink jobLink = new JobLink();

            jobLink.FKey     = FormTS.SelectedTaskNum;
            jobLink.LinkType = JobLinkType.Task;
            _listJobLinks.Add(jobLink);
            FillGridTasks();
        }
Example #19
0
        private bool AddFeatureRequest()
        {
            FormFeatureRequest FormFR = new FormFeatureRequest()
            {
                IsSelectionMode = true
            };

            FormFR.ShowDialog();
            if (FormFR.DialogResult != DialogResult.OK)
            {
                return(false);
            }
            JobLink jobLink = new JobLink();

            jobLink.FKey     = FormFR.SelectedFeatureNum;
            jobLink.LinkType = JobLinkType.Request;
            _listJobLinks.Add(jobLink);
            FillGridFeatureReq();
            return(true);
        }
Example #20
0
        public List <JobLink> ExtractJobLink(CauHinh ch, string link, string app_id, out string msg)
        {
            is_authenticated = false;
            msg = "";
            List <JobLink> lst = new List <JobLink>();

            using (var browser = new XBrowser(user_profile_path, string.Empty, false, show_browser))
            {
                string url        = browser.GoTo(link);
                string wait_xpath = ".//span[@id='currentCredit']";
                is_authenticated = url.Contains(ch.url_login) ? browser.Login(ch.url_login, ch.username, ch.password, ch.xpath_username, ch.xpath_password, out msg, wait_xpath, false) : browser.GetUrl().Contains(url);
                if (is_authenticated)
                {
                    browser.GoTo(link);
                    var eles = browser.Find("//tbody[@class='tbody-job']//td[3]/a");

                    if (eles.Count > 0)
                    {
                        foreach (var item in eles)
                        {
                            var url_tin = browser.GetAttribute(item, "href");
                            if (!string.IsNullOrEmpty(url_tin))
                            {
                                JobLink job = new JobLink(LoaiLink.JOB_LINK);
                                job.app_id           = app_id;
                                job.link             = url_tin;
                                job.trang_thai       = TrangThai.DANG_SU_DUNG;
                                job.trang_thai_xu_ly = TrangThaiXuLy.CHUA_XU_LY;
                                job.nguoi_tao        = ch.username;
                                lst.Add(job);
                            }
                        }
                    }
                }
            }
            return(lst);
        }
Example #21
0
        private void gridSubscribers_TitleAddClick(object sender, EventArgs e)
        {
            FormUserPick FormUP = new FormUserPick();

            //Suggest current user if not already watching.
            if (_listJobLinks.FindAll(x => x.LinkType == JobLinkType.Subscriber).All(x => x.FKey != Security.CurUser.UserNum))
            {
                FormUP.SuggestedUserNum = Security.CurUser.UserNum;
            }
            FormUP.IsSelectionmode = true;
            FormUP.ShowDialog();
            if (FormUP.DialogResult != DialogResult.OK)
            {
                return;
            }
            JobLink jobLink = new JobLink()
            {
                FKey     = FormUP.SelectedUserNum,
                LinkType = JobLinkType.Subscriber
            };

            _listJobLinks.Add(jobLink);
            FillGridSubscribers();
        }
Example #22
0
 ///<summary>Returns true if Update(JobLink,JobLink) would make changes to the database.
 ///Does not make any changes to the database and can be called before remoting role is checked.</summary>
 public static bool UpdateComparison(JobLink jobLink, JobLink oldJobLink)
 {
     if (jobLink.JobNum != oldJobLink.JobNum)
     {
         return(true);
     }
     if (jobLink.FKey != oldJobLink.FKey)
     {
         return(true);
     }
     if (jobLink.LinkType != oldJobLink.LinkType)
     {
         return(true);
     }
     if (jobLink.Tag != oldJobLink.Tag)
     {
         return(true);
     }
     if (jobLink.DisplayOverride != oldJobLink.DisplayOverride)
     {
         return(true);
     }
     return(false);
 }
Example #23
0
        public List <JobLink> ExtractJobLink(CauHinh ch, string link, string app_id, out string msg)
        {
            is_authenticated = false;
            msg = "";
            List <JobLink> lst = new List <JobLink>();

            using (var browser = new XBrowser(user_profile_path, string.Empty, false, show_browser))
            {
                string url        = browser.GoTo("https://mywork.com.vn/nha-tuyen-dung/dang-nhap");
                string wait_xpath = ".//div[@class='icon_menu user-info text-center']";
                System.Threading.Thread.Sleep(2000);
                var home = browser.GetUrl();
                is_authenticated = home == "https://mywork.com.vn/" || (link != url
                    ? browser.Login(ch.url_login, ch.username, ch.password, ch.xpath_username,
                                    ch.xpath_password, out msg, wait_xpath, false)
                    : browser.GetUrl().Contains(url));

                if (is_authenticated)
                {
                    browser.GoTo(link);
                    System.Threading.Thread.Sleep(5000);
                    List <string> lst_links      = new List <string>();
                    var           cv_paging_eles = browser.Find("//ul[@class='page-01-lst']//a").Where(x => x.Text != "Trang trước" && x.Text != "Trang sau");

                    if (cv_paging_eles.Count() > 0)
                    {
                        var lst_link_paging = new List <string>();
                        foreach (var pg_ele in cv_paging_eles)
                        {
                            browser.Click(pg_ele);
                            System.Threading.Thread.Sleep(3000);
                            var e = browser.Find(".//ul[@class='jobslist-01-ul']/li/div/div/ul/li[1]/a");

                            try
                            {
                                foreach (var item_href in e)
                                {
                                    var ten_job = item_href.Text;
                                    var url_tin = browser.GetAttribute(item_href, "href");
                                    lst_links.Add(url_tin);
                                    if (!string.IsNullOrEmpty(url_tin))
                                    {
                                        JobLink job = new JobLink(LoaiLink.JOB_LINK)
                                        {
                                            app_id           = app_id,
                                            link             = url_tin,
                                            trang_thai       = TrangThai.DANG_SU_DUNG,
                                            trang_thai_xu_ly = TrangThaiXuLy.CHUA_XU_LY,
                                            nguoi_tao        = ch.username,
                                            ten_job          = ten_job
                                        };
                                        lst.Add(job);
                                    }
                                }
                            }
                            catch (Exception ex)
                            {
                                Console.WriteLine(ex.Message);
                            }
                        }
                    }
                }
            }
            return(lst);
        }
Example #24
0
        public List <UngVien> XuLyCV(XBrowser browser, JobLink job, string url_ung_vien)
        {
            job.trang_thai_xu_ly = TrangThaiXuLy.DA_XU_LY;

            List <UngVien> lst_ung_vien = new List <UngVien>();

            try
            {
                //var eles_ung_vien = browser.Find("//table[@class='el-table__body']//tbody//div/div/div[1]/a");
                //if (eles_ung_vien.Count <= 0)
                //{
                //    job.thong_tin_xu_ly = Common.KHONG_TIM_THAY_UNG_VIEN;
                //}

                try
                {
                    UngVien ung_vien = new UngVien();
                    ung_vien.vi_tri         = job.ten_job;
                    ung_vien.ngay_tao       = ung_vien.ngay_sua = XMedia.XUtil.TimeInEpoch();
                    ung_vien.app_id         = job.app_id;
                    ung_vien.job_link       = job.link;
                    ung_vien.ho_ten         = browser.GetInnerText("//div[@class='panel-body']//h5/span", 2000);
                    ung_vien.link_cv_online = browser.GetAttribute("//div[@class='panel-footer']//div[@class='pull-right']//a", "href");
                    ThongTinChungUngVien ttuv = new ThongTinChungUngVien();
                    ttuv.domain = "mywork.com";
                    ung_vien.thong_tin_chung = ttuv;
                    //Bóc tách XPATH để lấy được thông tin này nếu có
                    ung_vien.kinh_nghiem   = browser.GetInnerText("//div[@class='list-item']");
                    ung_vien.ky_nang       = browser.GetInnerText("//div[@class='panel-body']/div[7]");
                    ung_vien.so_dien_thoai = browser.GetInnerText("//div[@class='info']//div/div[2]/p[2]/span");
                    ung_vien.email         = browser.GetInnerText("//div[@class='info']//div[2]/p[1]/a");
                    Uri uri = new Uri(url_ung_vien);
                    ung_vien.domain    = uri.Host;
                    ung_vien.custom_id = url_ung_vien.Split('/').Last();
                    ung_vien.hoc_van   = "";
                    ung_vien.ngay_sinh = 0;
                    //Tai file
                    var cv_byte = browser.DownloadFile(ung_vien.link_cv_online, out string cv_file_name);
                    if (cv_byte != null)
                    {
                        ung_vien.cv_byte = cv_byte;
                        WriteFile($"{cv_save_path}\\{cv_file_name}", cv_byte);
                        ung_vien.link_cv_offline = cv_file_name;
                    }

                    ung_vien.full_text = browser.GetPageSource();
                    ung_vien.nguoi_tao = job.nguoi_tao;
                    lst_ung_vien.Add(ung_vien);
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex);
                }
            }
            catch (Exception ex)
            {
                job.trang_thai_xu_ly = TrangThaiXuLy.LOI;
                job.thong_tin_xu_ly  = ex.Message;
            }
            job.ngay_xu_ly = XUtil.TimeInEpoch();
            return(lst_ung_vien);
        }
Example #25
0
        private List <UngVien> XuLyCV(XBrowser browser, JobLink job)
        {
            job.trang_thai_xu_ly = TrangThaiXuLy.DA_XU_LY;

            List <UngVien> lst_ung_vien = new List <UngVien>();

            try
            {
                var eles_ung_vien = browser.Find("//div[@class='table-responsive']/table//td[2]/a");
                if (eles_ung_vien.Count > 0)
                {
                    foreach (var item_ung_vien in eles_ung_vien)
                    {
                        try
                        {
                            browser.Click(item_ung_vien);
                            UngVien ung_vien = new UngVien();
                            ung_vien.vi_tri         = job.ten_job;
                            ung_vien.ngay_tao       = ung_vien.ngay_sua = XMedia.XUtil.TimeInEpoch();
                            ung_vien.app_id         = job.app_id;
                            ung_vien.job_link       = job.link;
                            ung_vien.ho_ten         = browser.GetInnerText("//div[@id='action-box']//tr[1]//td[1]", 2000);
                            ung_vien.link_cv_online = browser.GetAttribute("//a[@id='btn-download-candidate']", "href");
                            ThongTinChungUngVien ttuv = new ThongTinChungUngVien();
                            ttuv.domain              = "topcv.vn";
                            ttuv.full_text           = browser.GetInnerHtml("//div[@id='action-box']/table");
                            ung_vien.thong_tin_chung = ttuv;
                            //Bóc tách XPATH để lấy được thông tin này nếu có
                            ung_vien.kinh_nghiem = browser.GetInnerText("//div[@class='info']//div/div[1]/p[3]/strong");
                            ung_vien.ky_nang     = "";
                            ung_vien.hoc_van     = "";
                            ung_vien.ngay_sinh   = 0;
                            //Tai file

                            var cv_byte = browser.DownloadFile(ung_vien.link_cv_online, out string cv_file_name);
                            if (cv_byte != null)
                            {
                                ung_vien.cv_byte = cv_byte;
                                WriteFile($"{cv_save_path}\\{cv_file_name}", cv_byte);
                                ung_vien.link_cv_offline = cv_file_name;
                            }
                            ung_vien.full_text = browser.GetPageSource();
                            ung_vien.nguoi_tao = job.nguoi_tao;
                            lst_ung_vien.Add(ung_vien);
                            browser.FindAndClick("//div[@title='Đóng lại']");
                        }
                        catch (Exception)
                        {
                        }
                    }
                }
                else
                {
                    job.thong_tin_xu_ly = Common.KHONG_TIM_THAY_UNG_VIEN;
                }
            }
            catch (Exception ex)
            {
                job.trang_thai_xu_ly = TrangThaiXuLy.LOI;
                job.thong_tin_xu_ly  = ex.Message;
            }
            job.ngay_xu_ly = XUtil.TimeInEpoch();
            return(lst_ung_vien);
        }
Example #26
0
        //public MyWorkPost()
        //{
        //}

        public bool ExtractThongTin(CauHinh ch, string link, string app_id, out string msg, UngVienJobModel.ChiTietTinModel ct, bool is_debug = false)
        {
            _logger.Info("START POST MYWORK");
            is_authenticated = false;
            msg = "";
            //string username = XUtil.ConfigurationManager.AppSetting["MyWork:username"];
            //string password = XUtil.ConfigurationManager.AppSetting["MyWork:password"];

            using (var browser = new XBrowser(user_profile_path, string.Empty, false, is_debug))
            {
                browser.GoTo(ch.url_login);
                var login_form = browser.Find(".//form[@class='form-hook']");
                if (login_form.Count > 0)
                {
                    try
                    {
                        foreach (var element in login_form)
                        {
                            element.FindElement(By.XPath(ch.xpath_username)).SendKeys(ch.username);
                            element.FindElement(By.XPath(ch.xpath_password)).SendKeys(ch.password);
                            //element.FindElement(By.XPath(".//button[@class='el-button full-width el-button--primary']")).Click();
                            element.FindElement(By.XPath(ch.xpath_password)).SendKeys(Keys.Enter);
                            //wait element nao do xuat hien
                            _logger.Info("LOGIN MYWORK SUCCESS");
                            Thread.Sleep(4000);
                        }
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine(e);
                    }
                }

                browser.GoTo(link);
                if (browser.GetUrl() == link)
                {
                    System.Threading.Thread.Sleep(2000);
                    //is_authenticated = link != url ? browser.Login(ch.url_login, ch.username, ch.password, ch.xpath_username, ch.xpath_password, out msg) : browser.GetUrl().Contains(url);
                    is_authenticated = true;
                    _logger.Info("LOGIN MYWORK SUCCESS");
                }

                if (is_authenticated)
                {
                    //Thông tin công việc
                    try
                    {
                        var thong_tin_cong_viec = browser.Find(".//div[@class='create-cnt-box'][1]");
                        if (thong_tin_cong_viec != null)
                        {
                            foreach (var element in thong_tin_cong_viec)
                            {
                                var chuc_danh = element.FindElement(By.XPath(
                                                                        ".//input[@name='title']"));
                                if (chuc_danh != null)
                                {
                                    chuc_danh.SendKeys(ct.chuc_danh);
                                    _logger.Info($"da send chuc danh {ct.chuc_danh}");
                                }
                                else
                                {
                                    _logger.Error("khong tim thay xpath chuc danh");
                                }

                                // số lượng tuyển
                                var so_luong = element.FindElement(By.XPath(".//input[@name='vacancy_quantity']"));
                                so_luong.SendKeys(Keys.Control + "a");
                                so_luong.SendKeys(Keys.Delete);
                                so_luong?.SendKeys(ct.so_luong_tuyen.ToString());

                                var cap_bac =
                                    element.FindElement(By.XPath("div[2]/div/div[5]/div/div[2]/div/div/span/span"));
                                if (cap_bac != null)
                                {
                                    cap_bac.Click();
                                    _logger.Info($"da send cap bac : {ct.cap_bac}");
                                    System.Threading.Thread.Sleep(2000);
                                    string str_vi_tri = ct.cap_bac;
                                    char[] spearator0 = { ',', '/', '-', ' ' };
                                    foreach (string s in str_vi_tri.Split(spearator0, StringSplitOptions.None))
                                    {
                                        if (!string.IsNullOrWhiteSpace(s))
                                        {
                                            var industry = browser.Find($".//div/div[contains(text(),'{s}')]");
                                            if (industry.Count > 0)
                                            {
                                                foreach (var item in industry)
                                                {
                                                    if (!string.IsNullOrWhiteSpace(item.Text))
                                                    {
                                                        item.Click();
                                                        break;
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }

                                //

                                // loại hình công việc
                                var loai_hinh =
                                    element.FindElement(By.XPath("div[2]/div/div[6]/div/div[2]/div/div/span/span"));
                                if (loai_hinh != null)
                                {
                                    loai_hinh.Click();
                                    System.Threading.Thread.Sleep(1000);
                                    var choose_loai_hinh = browser.Find($".//div/div[contains(text(),'{ct.loai_hinh_cong_viec}')]");
                                    if (choose_loai_hinh != null)
                                    {
                                        foreach (var choose in choose_loai_hinh)
                                        {
                                            if (!string.IsNullOrWhiteSpace(choose.Text))
                                            {
                                                choose.Click();
                                                break;
                                            }
                                        }
                                        _logger.Info($"da chon loai hinh cong viec: {ct.loai_hinh_cong_viec}");
                                    }
                                    else
                                    {
                                        _logger.Error("khong tim thay xpath loai hinh cong viec");
                                    }
                                }

                                // mức lương
                                var muc_luong = element.FindElement(By.XPath("div[2]/div/div[7]/div/div[2]/div/div/span/span"));
                                if (muc_luong != null)
                                {
                                    muc_luong.Click();
                                    _logger.Info($"chon muc luong");
                                    System.Threading.Thread.Sleep(1000);
                                    var choose_muc_luong = browser.Find($".//div/div[text()='{ct.muc_luong}']")?.First();
                                    if (choose_muc_luong != null)
                                    {
                                        choose_muc_luong.Click();
                                        _logger.Info($"da chon muc luong {ct.muc_luong}");
                                    }
                                    else
                                    {
                                        _logger.Error("khong tim thay xpath, khong tim thay muc luong phu hop");
                                    }
                                }

                                // địa điểm làm việc
                                var dia_diem = element.FindElement(By.XPath("div[2]/div/div[9]/div/div[2]/div/div/span/span"));

                                if (dia_diem != null)
                                {
                                    dia_diem.Click();
                                    System.Threading.Thread.Sleep(1000);
                                    var choose_dia_diem = browser.Find($".//div/div[contains(text(),'{ct.dia_chi}')]")?.First();
                                    if (choose_dia_diem != null)
                                    {
                                        choose_dia_diem.Click();
                                        _logger.Info($"da chon dia diem {ct.dia_chi}");
                                    }
                                    else
                                    {
                                        _logger.Error("khong tim thay xpath dia diem");
                                    }
                                }

                                // ngành nghề
                                var nganh_nghe = element.FindElement(By.XPath("div[2]/div/div[10]/div/div[2]/div/div/span/span"));
                                if (nganh_nghe != null)
                                {
                                    nganh_nghe.Click();
                                    _logger.Info("chon nganh nghe phu hop");
                                    System.Threading.Thread.Sleep(1000);
                                    foreach (string nghe in ct.nganh_nghe)
                                    {
                                        var nn = browser.Find($".//div/div[text()='{nghe}']")?.First();
                                        if (nn != null)
                                        {
                                            nn.Click();
                                            _logger.Info($"da chon nganh nghe {nn}");
                                        }
                                        else
                                        {
                                            _logger.Error($"khong tim thay xpath nganh nghe {nn}]");
                                        }
                                    }
                                }

                                // mô tả công việc
                                var mo_ta = element.FindElement(By.XPath(".//textarea[@name='description']"));
                                if (mo_ta != null)
                                {
                                    mo_ta.SendKeys(ct.mo_ta_cong_viec);
                                    _logger.Info($"da send mo ta cong viec {ct.mo_ta_cong_viec}");
                                }
                                else
                                {
                                    _logger.Error("khong tim thay xpath mo ta cong viec");
                                }

                                var quyen_loi = element.FindElement(By.XPath(".//textarea[@name='benefit']"));
                                if (quyen_loi != null)
                                {
                                    quyen_loi.SendKeys(ct.quyen_loi_ung_vien);
                                    _logger.Info($"da send quyen loi ung vien {ct.quyen_loi_ung_vien}");
                                }
                                else
                                {
                                    _logger.Error("khong tim thay xpath quyen_loi_ung_vien");
                                }
                            }

                            // Yêu cầu công việc
                            var yeu_cau_cong_viec = browser.Find(".//div[@class='create-cnt-box'][2]");
                            if (yeu_cau_cong_viec != null)
                            {
                                foreach (var element in yeu_cau_cong_viec)
                                {
                                    //kinh nghiem lam viec
                                    var ele_kn = element.FindElement(By.XPath("div[2]/div/div[1]/div/div[2]/div/div/span/span"));
                                    if (ele_kn != null)
                                    {
                                        ele_kn.Click();
                                        if (!string.IsNullOrEmpty(ct.yeu_cau_kinh_nghiem))
                                        {
                                            var choose_kinh_nghiem = browser.Find($".//div/div[contains(text(),'{ct.yeu_cau_kinh_nghiem}')]")?.First();
                                            choose_kinh_nghiem?.Click();
                                            _logger.Info($"da send yeu cau kinh nghiem {ct.yeu_cau_kinh_nghiem}");
                                        }
                                        else
                                        {
                                            browser.ScrollIntoView(ele_kn);
                                            browser.SetAttribute(ele_kn, "readonly", "");
                                            ele_kn.SendKeys("Đã có nhiều kinh nghiệm trong nghề");
                                            _logger.Info($"da send yeu cau kinh nghiem {ct.yeu_cau_kinh_nghiem}");
                                        }
                                    }

                                    // bang cap
                                    var ele_bcap = element.FindElement(By.XPath("div[2]/div/div[2]/div/div[2]/div/div/span/span"));
                                    if (ele_bcap != null)
                                    {
                                        ele_bcap.Click();

                                        var choose_bang_cap = browser.Find($".//div/div[contains(text(),'{ct.bang_cap}')]")?.First();
                                        choose_bang_cap?.Click();
                                        _logger.Info($"da send bang cap {ct.bang_cap}");
                                    }
                                    // giới tính
                                    var ele_gtinh = element.FindElement(By.XPath("div[2]/div/div[3]/div/div[2]/div/div/span/span"));
                                    if (ele_gtinh != null)
                                    {
                                        ele_gtinh.Click();

                                        var choose_gender = browser
                                                            .Find($".//div/div[contains(text(),'{ct.gioi_tinh}')]")?.First();
                                        choose_gender?.Click();
                                        _logger.Info($"da send gioi tinh {ct.gioi_tinh}");
                                    }

                                    // hạn nộp hồ sơ

                                    var date_now = DateTime.Today.AddMonths(1).ToString("dd/MM/yyyy");

                                    var han_nop_hs =
                                        element.FindElement(By.XPath("div[2]/div/div[4]/div/div[2]/div/div//input"));
                                    if (han_nop_hs != null)
                                    {
                                        han_nop_hs.SendKeys(Keys.Control + "a");
                                        han_nop_hs.SendKeys(Keys.Delete);
                                        han_nop_hs.SendKeys(date_now);
                                        _logger.Info($"da send han nop ho so {date_now}");
                                    }
                                    else
                                    {
                                        _logger.Error($"khong tim thay xpath han nop ho so");
                                    }

                                    // ngon ngu ho so

                                    var ngon_ngu_ho_so = element.FindElement(By.XPath("div[2]/div/div[5]/div/div[2]/div/div/span/span"));
                                    if (ngon_ngu_ho_so != null)
                                    {
                                        ngon_ngu_ho_so.Click();
                                        var choose_ngon_ngu = browser.Find($".//div/div[contains(text(),'Tiếng Việt')]")?.First();
                                        choose_ngon_ngu?.Click();
                                        _logger.Info($"da send gioi tinh {ct.gioi_tinh}");
                                    }

                                    // yeu cau cong viec
                                    var yc = element.FindElement(By.XPath(".//textarea[@name='job_requirement']"));
                                    if (yc != null)
                                    {
                                        yc.SendKeys(ct.yeu_cau_cong_viec);
                                        _logger.Info($"da send yeu cau cong viec {ct.yeu_cau_cong_viec}");
                                    }
                                    else
                                    {
                                        _logger.Error("khong tim thay xpath yeu cau cong viec");
                                    }
                                }
                            }

                            //Thông tin liên hệ(Bắt buộc)
                            var thong_tin_lien_he = browser.Find(".//div[@class='create-cnt-box'][3]");
                            if (thong_tin_lien_he != null)
                            {
                                foreach (var element in thong_tin_lien_he)
                                {
                                    // ten nguoi lien he
                                    var nguoi_lien_he = element.FindElement(By.XPath(".//input[@name='contact_name']"));
                                    if (nguoi_lien_he != null)
                                    {
                                        //IWebElement textBox = nguoi_lien_he;
                                        //textBox.SendKeys(Keys.Control + "a");
                                        nguoi_lien_he.SendKeys(ct.lien_he);
                                        _logger.Info($"da send nguoi lien he {ct.lien_he}");
                                    }
                                    else
                                    {
                                        _logger.Error($"khong tim thay xpath lien he");
                                    }

                                    // dia chi lien he
                                    var dia_chi_lien_he =
                                        element.FindElement(By.XPath(".//input[@name='contact_address']"));

                                    if (dia_chi_lien_he != null)
                                    {
                                        //IWebElement textBox = nguoi_lien_he;
                                        //textBox.SendKeys(Keys.Control + "a");
                                        dia_chi_lien_he.SendKeys(ct.dia_chi_chi_tiet);
                                        _logger.Info($"da send dia_chi lien he {ct.dia_chi_chi_tiet}");
                                    }
                                    else
                                    {
                                        _logger.Error($"khong tim thay xpath lien he");
                                    }

                                    //so dien thoai lien he
                                    var sdt_lien_he = element.FindElement(By.XPath(".//input[@name='contact_phone']"));
                                    if (sdt_lien_he != null)
                                    {
                                        sdt_lien_he.SendKeys(Keys.Control + "a");
                                        sdt_lien_he.SendKeys(ct.so_dien_thoai);
                                        _logger.Info($"da send so dien thoai {ct.so_dien_thoai}");
                                    }
                                    else
                                    {
                                        _logger.Error($"khong tim thay xpath so dien thoai");
                                    }

                                    // email lien he

                                    var email_lien_he =
                                        element.FindElement(By.XPath(".//input[@name='contact_email']"));
                                    if (sdt_lien_he != null)
                                    {
                                        email_lien_he.SendKeys(ct.email);
                                        _logger.Error($"da sendkey email");
                                    }
                                    else
                                    {
                                        _logger.Error($"khong tim thay email");
                                    }
                                }
                            }

                            //var dich_vu =
                            //    element.FindElement(
                            //        By.XPath(".//input[@placeholder='Chọn dịch vụ cho tin đăng']"));
                            //dich_vu?.Click();



                            browser.FindAndClick(".//button[@class='btn btn-orange-56 ex-upload']");
                            _logger.Info("POST MYWORK SUCCESS");
                            Thread.Sleep(5000);

                            string url_home = browser.GetUrl();

                            if (url_home == "https://mywork.com.vn/nha-tuyen-dung/tao-tin-tuyen-dung-thanh-cong")
                            {
                                browser.FindAndClick(".//a[@class='btn btn-orange-46 w370 w-100-mb font17']");
                                Thread.Sleep(1000);
                                if (browser.GetUrl() == "https://mywork.com.vn/nha-tuyen-dung/quan-ly-tin-dang?")
                                {
                                    var els = browser.Find($".//div[@class='jobslist-01-cont']//a[text()='{ct.chuc_danh}']");

                                    string link_post = "";
                                    foreach (var r_url in els)
                                    {
                                        link_post = browser.GetAttribute(r_url, "href");
                                        break;
                                    }
                                    string id = link_post.Replace("https://mywork.com.vn/nha-tuyen-dung/xem-truoc-tin-dang?id=", "").Split('/').First();

                                    if (!string.IsNullOrEmpty(link_post))
                                    {
                                        List <JobLink> lst_saved = new List <JobLink>();
                                        JobLink        saved     = new JobLink(LoaiLink.JOB_LINK)
                                        {
                                            ten_job          = ct.chuc_danh,
                                            app_id           = app_id,
                                            link             = $"https://mywork.com.vn/nha-tuyen-dung/ho-so-da-ung-tuyen?job_id={id}",
                                            trang_thai       = TrangThai.DANG_SU_DUNG,
                                            trang_thai_xu_ly = TrangThaiXuLy.CHUA_XU_LY,
                                            nguoi_tao        = ch.username
                                        };
                                        lst_saved.Add(saved);
                                        _logger.Info("POST MYWORK SUCCESS!");
                                        return(ES.JobLinkRepository.Instance.IndexMany(lst_saved) > 0);
                                    }
                                }
                            }
                            else
                            {
                                _logger.Error("POST MY WORK FAILED! CAN'T GET LINK POST OR JOB NAME IS EXISTED");
                                return(false);
                            }
                        }

                        //else
                        //{
                        //    _logger.Error("CAN'T FOUND FORM POST MYWORK");
                        //}
                    }
                    catch (Exception ex)
                    {
                        _logger.Error(ex);
                    }
                }
            }

            _logger.Error("POST MYWORK FAILED!");
            return(false);
        }
Example #27
0
        public bool ExtractThongTin(CauHinh ch, string link, string app_id, out string msg, UngVienJobModel.ChiTietTinModel ct, bool is_debug = false)
        {
            _logger.Info("START POST JOBSTREET");
            is_authenticated = false;
            msg = "";
            //string username = XUtil.ConfigurationManager.AppSetting["JobStreet:username"];
            //string password = XUtil.ConfigurationManager.AppSetting["JobStreet:password"];
            using (var browser = new XBrowser(user_profile_path, string.Empty, false, is_debug))
            {
                browser.GoTo(ch.url_login);
                var formLogin = browser.Find(".//div[@class='Card__root']");
                if (formLogin.Count > 0)
                {
                    foreach (var form in formLogin)
                    {
                        form.FindElement(By.XPath(ch.xpath_username)).SendKeys(ch.username);
                        form.FindElement(By.XPath(ch.xpath_password)).SendKeys(XMedia.XUtil.DecodeToken(ch.password));
                        form.FindElement(By.XPath(".//button[@class='Button__primary Button__insideCard Button__extraTopMargin']")).Click();
                        System.Threading.Thread.Sleep(3000);
                        _logger.Info("LOGIN JOBSTREET SUCCESS");
                    }
                }
                System.Threading.Thread.Sleep(2000);
                browser.GoTo(link);

                var check_login = browser.Find("//*[@id='app']/div/nav/div/div/a[4]");
                if (check_login.Count >= 1)
                {
                    is_authenticated = true;
                    _logger.Info("CHECK LOGIN JOBSTREET SUCCESS");
                }
                System.Threading.Thread.Sleep(2000);
                if (is_authenticated)
                {
                    _logger.Info("LOGIN JOBSTREET SUCCESS");
                    var parent = browser.Find(".//div[@class='Card__root']");
                    if (parent.Count >= 1)
                    {
                        try
                        {
                            _logger.Info("START SENDKEYS");
                            foreach (var element in parent)
                            {
                                var chuc_danh = element.FindElement(By.Id("jobTitle"));
                                if (chuc_danh != null)
                                {
                                    chuc_danh.SendKeys(ct.chuc_danh);
                                    _logger.Info($"da send chuc danh {ct.chuc_danh}");
                                }
                                else
                                {
                                    _logger.Error("khong tim thay xpath chuc danh");
                                }

                                var loai_hinh_cv = element.FindElement(By.Id("jobType"));
                                if (loai_hinh_cv != null)
                                {
                                    loai_hinh_cv.SendKeys(ct.loai_hinh_cong_viec);
                                    _logger.Info($"da send loai hinh cong viec {ct.loai_hinh_cong_viec}");
                                }
                                else
                                {
                                    _logger.Error("khong tim thay xpath loai hinh cong viec");
                                }

                                var mo_ta = element.FindElement(By.XPath(".//div[@class='fr-element fr-view']"));
                                if (mo_ta != null)
                                {
                                    mo_ta.SendKeys(ct.mo_ta_cong_viec);
                                    _logger.Info($"da send mo ta cong viec {ct.mo_ta_cong_viec}");
                                }
                                else
                                {
                                    _logger.Error("khong tim thay xpath mo ta cong viec");
                                }

                                var save_button = element.FindElement(By.XPath(
                                                                          ".//button[@class='Button__primary Button__insideCard Button__extraTopMargin']"));
                                if (save_button != null)
                                {
                                    save_button.Click();
                                    _logger.Info($"luu lai job thanh cong");
                                    _logger.Info("POST JOBSTREET SUCCESS");
                                }
                                else
                                {
                                    _logger.Error("khong the luu lai cong viec");
                                }
                                System.Threading.Thread.Sleep(3000);
                                string cur_url   = browser.GetUrl();
                                string del_str   = cur_url.Substring(cur_url.LastIndexOf("/", StringComparison.Ordinal));
                                string link_post = cur_url.Replace(del_str, "/details");

                                List <JobLink> lst_saved = new List <JobLink>();
                                JobLink        job       = new JobLink(LoaiLink.JOB_LINK)
                                {
                                    ten_job          = ct.chuc_danh,
                                    app_id           = app_id,
                                    link             = link_post,
                                    trang_thai       = TrangThai.DANG_SU_DUNG,
                                    trang_thai_xu_ly = TrangThaiXuLy.CHUA_XU_LY,
                                    nguoi_tao        = ch.username
                                };
                                lst_saved.Add(job);

                                browser.GoTo("https://employer.jobstreet.vn/vn/home");
                                _logger.Info("POST JOBSTREET SUCCESS!");
                                return(ES.JobLinkRepository.Instance.IndexMany(lst_saved) > 0);
                            }

                            #region Step2JobStreet

                            //var parent_next = browser.Find(".//div[@class='Card__root']");
                            //if (parent_next.Count > 0)
                            //{
                            //    try
                            //    {
                            //        foreach (var element in parent_next)
                            //        {
                            //            element.FindElement(By.Id("name")).SendKeys(ct.ten_cong_ty);
                            //            element.FindElement(By.Id("country")).SendKeys("Việt Nam");
                            //            IWebElement ele = element.FindElement(By.Id("businessAddress"));
                            //            ele.SendKeys(ct.dia_chi_chi_tiet);
                            //            System.Threading.Thread.Sleep(1000);
                            //            IList<IWebElement> elements = (element.FindElements(By.XPath("//ul[@role='listbox']/child::li")));
                            //            foreach (var ele1 in elements)
                            //            {
                            //                ele1.Click();
                            //                break;
                            //            }
                            //            Console.WriteLine("2131");
                            //            foreach (var nganh in ct.nganh_nghe)
                            //            {
                            //                browser.FindAndClick($".//select[@id='industryId']/option[contains(text(),'{nganh}')]");
                            //            }

                            //            element.FindElement(By.Id("businessSize")).SendKeys(ct.quy_mo_doanh_nghiep);
                            //            string recruiter = "recruiter";
                            //            var select_pos = new SelectElement(element.FindElement(By.Id("role")));
                            //            select_pos.SelectByValue(recruiter);
                            //            element.FindElement(By.Id("recruitmentCompanyName")).SendKeys(ct.ten_cong_ty);
                            //            List<LinkSaved> lst_saved = new List<LinkSaved>();
                            //            LinkSaved saved = new LinkSaved();
                            //            saved.website = "jobstreet.vn";
                            //            saved.ten_job = ct.chuc_danh;
                            //            lst_saved.Add(saved);
                            //            Es.IndexLinkPosted(lst_saved);

                            //            return true;
                            //        }
                            //    }
                            //    catch (Exception ex)
                            //    {
                            //        Console.WriteLine(ex);
                            //    }
                            //}

                            #endregion Step2JobStreet
                        }
                        catch (Exception ex)
                        {
                            _logger.Error(ex);
                        }
                    }
                    else
                    {
                        _logger.Error("CAN'T FOUND FORM POST JOBSTREET");
                    }
                }
                else
                {
                    _logger.Error("LOGIN JOBSTREET FAILED!");
                }
            }
            _logger.Error("POST JOBSTREET FAILED!");
            return(false);
        }
Example #28
0
      public bool ExtractThongTin(CauHinh ch, string link, string app_id, out string msg, UngVienJobModel.ChiTietTinModel ct, bool is_debug = false)
      {
          _logger.Info("START POST TOPCV");
          is_authenticated = false;
          msg = "";
          //string username = XUtil.ConfigurationManager.AppSetting["TopCv:username"];
          //string password = XUtil.ConfigurationManager.AppSetting["TopCv:password"];
          using (var browser = new XBrowser(user_profile_path, string.Empty, false, is_debug))
          {
              browser.GoTo(ch.url_login);
              var login_form = browser.Find(".//div[@id='page-login']");
              if (login_form.Count >= 1)
              {
                  foreach (var element in login_form)
                  {
                      try
                      {
                          element.FindElement(By.XPath(ch.xpath_username)).SendKeys(ch.username);
                          element.FindElement(By.XPath(ch.xpath_password)).SendKeys(XUtil.DecodeToken(ch.password));
                          element.FindElement(By.XPath(ch.xpath_password)).SendKeys(Keys.Enter);
                      }
                      catch (Exception)
                      {
                      }
                  }
              }
              else
              {
                  _logger.Error("LOGIN TOPCV FAILED OR WAS LOGIN!");
              }

              browser.GoTo(link);

              if (browser.GetUrl() == link)
              {
                  _logger.Info("LOGIN TOPCV SUCCESS");
                  is_authenticated = true;
              }

              //is_authenticated = link != url ? browser.Login(ch.url_login, ch.username, ch.password, ch.xpath_username, ch.xpath_password, out msg) : browser.GetUrl().Contains(url);

              if (is_authenticated)
              {
                  var parent = browser.Find(".//div[@class='panel form-job panel-light']");
                  if (parent != null)
                  {
                      try
                      {
                          foreach (var element in parent)
                          {
                              // chức danh
                              var send_nganh_nghe = element.FindElement(By.Id("jobTitle"));
                              if (send_nganh_nghe != null)
                              {
                                  send_nganh_nghe.SendKeys(ct.chuc_danh);
                                  _logger.Info($"da send nganh nghe {ct.chuc_danh}");
                              }
                              else
                              {
                                  _logger.Error($"khong tim thay xpath {ct.chuc_danh}");
                              }
                              System.Threading.Thread.Sleep(1000);
                              var choose_nganh_nghe =
                                  element.FindElement(By.XPath("//input[@id='jobTitle']/preceding-sibling::div"));
                              if (choose_nganh_nghe != null)
                              {
                                  choose_nganh_nghe.Click();
                              }
                              var nganh_nghe_topcv = browser.Find(".//input[@placeholder='Chọn ngành nghề']")?.First();
                              if (nganh_nghe_topcv != null)
                              {
                                  nganh_nghe_topcv.Click();
                                  _logger.Info("chon nganh nghe topcv");
                                  foreach (var work in ct.nganh_nghe)
                                  {
                                      System.Threading.Thread.Sleep(2000);
                                      var nganh_nghe = browser.Find($".//ul[@id='select2-categoryIds-results']/li[text()='{work.Trim()}']")?.First();
                                      if (nganh_nghe == null)
                                      {
                                          browser.FindAndClick(".//input[@placeholder='Chọn ngành nghề']");
                                          System.Threading.Thread.Sleep(2000);
                                          browser.Find($".//ul[@id='select2-categoryIds-results']/li[text()='{work}']")
                                          ?.First().Click();
                                          _logger.Info($"da chon nganh nghe {work}");
                                      }
                                      else
                                      {
                                          browser.FindAndClick(
                                              $".//ul[@id='select2-categoryIds-results']/li[text()='{work}']");
                                          _logger.Info($"da chon nganh nghe {work}");
                                      }
                                  }
                              }

                              // địa điểm
                              var dia_diem = element.FindElement(By.XPath(".//input[@placeholder='Chọn địa điểm']"));
                              if (dia_diem != null)
                              {
                                  dia_diem.Click();
                                  _logger.Info("chon dia diem topcv");
                                  System.Threading.Thread.Sleep(2000);
                                  var choose_dia_chi = browser.Find($".//ul[@id='select2-cityIds-results']/li[text()='{ct.dia_chi}']")?.First();
                                  if (choose_dia_chi != null)
                                  {
                                      choose_dia_chi.Click();
                                      _logger.Info($"da chon dia chi top cv {ct.dia_chi}");
                                  }
                                  else
                                  {
                                      _logger.Error("khong tim thay xpath dia chi");
                                  }
                              }

                              // số lượng
                              var so_luong = element.FindElement(By.Id("quantity"));
                              if (so_luong != null)
                              {
                                  so_luong.SendKeys(ct.so_luong_tuyen.ToString());
                                  _logger.Info($"da send so luong top cv {ct.so_luong_tuyen}");
                              }
                              else
                              {
                                  _logger.Error("khong tim thay xpath so luong");
                              }
                              // cấp bậc
                              var cap_bac = element.FindElement(By.XPath("//select[@name='position_id']/following::span[@class='select2 select2-container select2-container--bootstrap'][1]"));
                              if (cap_bac != null)
                              {
                                  cap_bac.Click();
                                  System.Threading.Thread.Sleep(2000);
                                  var choose_cap_bac = browser.Find($".//span[@class='select2-container select2-container--bootstrap select2-container--open']//li[text()='{ct.cap_bac}']")?.First();
                                  if (choose_cap_bac != null)
                                  {
                                      choose_cap_bac.Click();
                                      _logger.Info($"da chon cap bac {ct.cap_bac}");
                                  }
                                  else
                                  {
                                      _logger.Error("khong tim thay xpath cap bac");
                                  }
                              }

                              // find textbox
                              var textbox = browser.Find(".//div[@class='note-editable panel-body']");
                              if (textbox.Count > 0)
                              {
                                  // mô tả công việc
                                  var mo_ta_cong_viec = textbox[0];
                                  if (mo_ta_cong_viec != null)
                                  {
                                      mo_ta_cong_viec.SendKeys(ct.mo_ta_cong_viec);
                                      _logger.Info($"da send mo ta cong viec {ct.mo_ta_cong_viec}");
                                  }
                                  else
                                  {
                                      _logger.Error("khong tim thay xpath mo ta cong viec");
                                  }
                                  // yêu cầu ứng viên
                                  var yeu_cau_ung_vien = textbox[1];
                                  if (yeu_cau_ung_vien != null)
                                  {
                                      yeu_cau_ung_vien.SendKeys(ct.yeu_cau_cong_viec);
                                      _logger.Info($"da send yeu_cau_cong_viec {ct.yeu_cau_cong_viec}");
                                  }
                                  else
                                  {
                                      _logger.Error("khong tim thay xpath yeu_cau_cong_viec");
                                  }
                                  var quyen_loi_ung_vien = textbox[2];
                                  if (quyen_loi_ung_vien != null)
                                  {
                                      quyen_loi_ung_vien.SendKeys(ct.quyen_loi_ung_vien);
                                      _logger.Info($"da send quyen_loi_ung_vien {ct.quyen_loi_ung_vien}");
                                  }
                                  else
                                  {
                                      _logger.Error("khong tim thay xpath quyen_loi_ung_vien");
                                  }
                              }

                              element.FindElement(By.Id("btn-submit")).Click();
                              System.Threading.Thread.Sleep(1500);
                              var yc_publish = browser.Find(".//div[@id='suggestPublishRequestModal']");
                              if (yc_publish.Count > 0)
                              {
                                  foreach (var item in yc_publish)
                                  {
                                      item.FindElement(By.XPath(".//button[@class='btn btn-primary']")).Click();
                                      System.Threading.Thread.Sleep(1000);
                                  }
                              }
                              System.Threading.Thread.Sleep(1000);
                              string link_post = "";

                              var find_title_new = browser.Find(".//tbody[@class='tbody-job']/tr[1]");
                              if (find_title_new.Count > 0)
                              {
                                  foreach (var title in find_title_new)
                                  {
                                      title.FindElement(By.XPath(".//button")).Click();
                                      var els = browser.Find(".//ul/li/a[contains(text(),'Xem CV ứng tuyển')]");
                                      foreach (var e in els)
                                      {
                                          link_post = browser.GetAttribute(e, "href");
                                      }
                                  }
                              }

                              if (!string.IsNullOrEmpty(link_post))
                              {
                                  List <JobLink> lst_saved = new List <JobLink>();
                                  JobLink        saved     = new JobLink(LoaiLink.JOB_LINK)
                                  {
                                      ten_job          = ct.chuc_danh,
                                      app_id           = app_id,
                                      link             = link_post,
                                      trang_thai       = TrangThai.DANG_SU_DUNG,
                                      trang_thai_xu_ly = TrangThaiXuLy.CHUA_XU_LY,
                                      nguoi_tao        = ch.username
                                  };
                                  lst_saved.Add(saved);
                                  _logger.Info("POST TOPCV SUCCESS");
                                  return(ES.JobLinkRepository.Instance.IndexMany(lst_saved) > 0);
                              }
                          }
                      }
                      catch (Exception ex)
                      {
                          _logger.Error(ex);
                      }
                  }
                  else
                  {
                      _logger.Error("CAN'T FOUND FORM POST TOPCV");
                  }
              }
          }
          _logger.Error("POST TOPCV FAILED!");
          return(false);
      }
Example #29
0
        public List <JobLink> ExtractJobLink(CauHinh ch, List <string> lst_link, string app_id, out string msg)
        {
            is_authenticated = false;
            msg = "";
            List <JobLink> lst        = new List <JobLink>();
            string         wait_xpath = ".//li[@class='dropdown dropdown-user']";

            //ch.username = "******";
            //ch.password = "******";
            using (var browser = new XBrowser(user_profile_path, string.Empty, false, show_browser))
            {
                foreach (var link in lst_link)
                {
                    string url = browser.GoTo(link);
                    is_authenticated = link != url?browser.Login(ch.url_login, ch.username, ch.password, ch.xpath_username, ch.xpath_password, out msg, wait_xpath, false) : browser.GetUrl().Contains(url);

                    browser.GoTo(link);
                    try
                    {
                        var find_modal = browser.Find("//div[@id='modal']");
                        if (find_modal.Count > 0)
                        {
                            foreach (var modal in find_modal)
                            {
                                modal.FindElement(By.ClassName("close"))?.Click();
                            }
                        }
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine(e.Message);
                    }

                    if (is_authenticated)
                    {
                        var check_paging = browser.Find(".//ul[@class='pagination']/li/a");
                        if (check_paging.Count() > 0)
                        {
                            var list_url_page = new List <string>();
                            foreach (var loop in check_paging)
                            {
                                var url_page = browser.GetAttribute(loop, "href");
                                list_url_page.Add(url_page);
                            }

                            list_url_page = list_url_page.Distinct().ToList();
                            foreach (var go_url in list_url_page)
                            {
                                browser.GoTo(go_url);
                                System.Threading.Thread.Sleep(1500);
                                var eles_paging = browser.Find(".//table[@class='kv-grid-table table table-hover table-bordered table-striped']//tbody/tr/td[2]/strong/a[@title='Xem chi tiết việc làm và các ứng viên']");
                                if (eles_paging.Count > 0)
                                {
                                    foreach (var item in eles_paging)
                                    {
                                        var url_tin = browser.GetAttribute(item, "href");

                                        var ten_job = item.Text;

                                        if (!string.IsNullOrEmpty(url_tin))
                                        {
                                            var job = new JobLink(LoaiLink.JOB_LINK)
                                            {
                                                app_id           = app_id,
                                                link             = url_tin,
                                                trang_thai       = TrangThai.DANG_SU_DUNG,
                                                trang_thai_xu_ly = TrangThaiXuLy.CHUA_XU_LY,
                                                nguoi_tao        = ch.username,
                                                ten_job          = ten_job
                                            };
                                            lst.Add(job);
                                        }
                                    }
                                }
                            }
                        }
                        else
                        {
                            var eles = browser.Find(".//table[@class='kv-grid-table table table-hover table-bordered table-striped']//tbody/tr/td[2]/strong/a[@title='Xem chi tiết việc làm và các ứng viên']");
                            if (eles.Count > 0)
                            {
                                foreach (var item in eles)
                                {
                                    var url_tin = browser.GetAttribute(item, "href");

                                    var ten_job = item.Text;

                                    if (!string.IsNullOrEmpty(url_tin))
                                    {
                                        JobLink job = new JobLink(LoaiLink.JOB_LINK)
                                        {
                                            app_id           = app_id,
                                            link             = url_tin,
                                            trang_thai       = TrangThai.DANG_SU_DUNG,
                                            trang_thai_xu_ly = TrangThaiXuLy.CHUA_XU_LY,
                                            nguoi_tao        = ch.username,
                                            ten_job          = ten_job
                                        };
                                        lst.Add(job);
                                    }
                                }
                            }
                        }
                    }
                }
            }
            return(lst);
        }
Example #30
0
        private List <UngVien> XuLyCV(XBrowser browser, JobLink job)
        {
            job.trang_thai_xu_ly = TrangThaiXuLy.DA_XU_LY;

            List <UngVien> lst_ung_vien = new List <UngVien>();

            try
            {
                UngVien ung_vien = new UngVien();

                ung_vien.ngay_tao = ung_vien.ngay_sua = XUtil.TimeInEpoch(DateTime.Now);
                ung_vien.app_id   = job.app_id;
                ung_vien.job_link = job.link;
                ung_vien.vi_tri   = job.ten_job;

                ThongTinChungUngVien ttuv = new ThongTinChungUngVien();
                ttuv.domain = "jobsgo.vn";
                //ttuv.full_text = block_ung_vien.FindElement(By.XPath("//div[@class='Card__root ApplicationCard__root']")).;
                ung_vien.thong_tin_chung = ttuv;
                ung_vien.ho_ten          = browser.GetInnerText(".//div[@title='Họ tên ứng viên']", 200);
                ung_vien.link_cv_online  = browser.GetAttribute("//div[@class='lnks']/a[@class='btn-download-cv lnk cv']", "href");
                ung_vien.ky_nang         = browser.GetInnerText("//div[@class='skills-list']");
                ung_vien.hoc_van         = browser.GetInnerText("//div[@class='resume-items']//div[@class='name']");

                //div[@class='info-list']/ul/li[1]
                ung_vien.ngay_sinh     = 0;
                ung_vien.so_dien_thoai = browser.GetInnerText("//div[@class='info-list']/ul/li[3]/span[@class='tel']");
                ung_vien.email         = browser.GetInnerText("//div[@class='info-list']/ul/li[4]/span[@class='email']");
                ung_vien.dia_chi       = browser.GetInnerText("//div[@class='info-list']/ul/li[5]/span[@class='address']");

                Uri uri = new Uri(job.link);
                ung_vien.domain = uri.Host;
                var id = string.Join("/", job.link.Split('/').Skip(5));
                //id = id.Substring(0, id.LastIndexOf('/'));
                ung_vien.custom_id = id;
                //Tai file
                //javascript:void(0)

                var link_cv = browser.GetAttribute("//div[@class='lnks']/a[@class='btn-download-cv lnk cv']", "href");

                if (link_cv.Contains("javascript:void(0)"))
                {
                    System.Threading.Thread.Sleep(2500);
                    link_cv = browser.GetAttribute("//div[@class='lnks']/a[@class='btn-download-cv lnk cv']", "href");
                    ung_vien.link_cv_online = link_cv;
                }
                else
                {
                    System.Threading.Thread.Sleep(2500);
                    ung_vien.link_cv_online = link_cv;
                }

                var cv_byte = browser.DownloadFile(ung_vien.link_cv_online, out string cv_file_name);
                if (cv_byte != null)
                {
                    ung_vien.cv_byte = cv_byte;
                    WriteFile($"{cv_save_path}\\{cv_file_name}", cv_byte);
                    ung_vien.link_cv_offline = cv_file_name;
                }
                ung_vien.full_text = browser.GetPageSource();
                ung_vien.nguoi_tao = job.nguoi_tao;
                lst_ung_vien.Add(ung_vien);
                var count = lst_ung_vien.Count;
                System.Threading.Thread.Sleep(2000);
            }
            catch (Exception ex)
            {
                job.trang_thai_xu_ly = TrangThaiXuLy.LOI;
                job.thong_tin_xu_ly  = ex.Message;
            }
            job.ngay_xu_ly = XUtil.TimeInEpoch();

            return(lst_ung_vien);
        }