LinkedIn jobs filter

Filter jobs based on title and company

  1. // ==UserScript==
  2. // @name LinkedIn jobs filter
  3. // @description Filter jobs based on title and company
  4. // @namespace https://greasyfork.org/en/users/673321-christianmemije
  5. // @version 0.1.0
  6. // @license MIT
  7. // @author christianmemije
  8. // @match *://www.linkedin.com/*
  9. // @grant none
  10. // @supportURL https://github.com/christianmemije/jobfilters
  11. // ==/UserScript==
  12. (function () {
  13. // Configuration starts
  14. var desiredTitles = []; // e.g. ['front end', 'ui engineer']
  15. var undesiredTitles = []; // e.g. ['full stack', 'manager']
  16. var desiredCompanies = []; // e.g. ['Tesla', 'SpaceX']
  17. var undesiredCompanies = []; // e.g. ['Facebook', 'Amazon']
  18. // Configuration ends
  19. var debugMode = false;
  20. var desiredTitlesRegEx = new RegExp(desiredTitles.join('|'), 'i');
  21. var undesiredTitlesRegEx = new RegExp(undesiredTitles.join('|'), 'i');
  22. var desiredCompaniesRegEx = new RegExp(desiredCompanies.join('|'), 'i');
  23. var undesiredCompaniesRegEx = new RegExp(undesiredCompanies.join('|'), 'i');
  24. var jobTileSelector = 'li.artdeco-list__item';
  25. var jobTileTitleSelector = '.job-card-list__title';
  26. var jobCompanySelector = '.job-card-container__company-name';
  27. var jobCardSelector = 'li.card-list__item';
  28. var jobCarouselCardSelector = 'li.artdeco-carousel__item';
  29. var jobCardTitleSelector = '.job-card-square__title';
  30. var ghostCompanySelector = '.ghost-company';
  31. new MutationObserver(function (mutationRecords) {
  32. setTimeout(function () {
  33. mutationRecords.forEach(function (_a) {
  34. var addedNodes = _a.addedNodes;
  35. addedNodes.forEach(function (_a) {
  36. var nodeType = _a.nodeType;
  37. if (nodeType === Node.ELEMENT_NODE) {
  38. document
  39. .querySelectorAll(jobCardSelector + ", " + jobCarouselCardSelector + ", " + jobTileSelector)
  40. .forEach(function (job) {
  41. var title = job.querySelector(jobCardTitleSelector + ", " + jobTileTitleSelector);
  42. var company = job.querySelector("" + jobCompanySelector);
  43. var ghostCompany = !!job.querySelector(ghostCompanySelector);
  44. if (title &&
  45. company &&
  46. (ghostCompany ||
  47. (desiredTitles.length &&
  48. !desiredTitlesRegEx.test(title.textContent)) ||
  49. (undesiredTitles.length &&
  50. undesiredTitlesRegEx.test(title.textContent)) ||
  51. (desiredCompanies.length &&
  52. !desiredCompaniesRegEx.test(company.textContent)) ||
  53. (undesiredCompanies.length &&
  54. undesiredCompaniesRegEx.test(company.textContent)))) {
  55. if (debugMode) {
  56. job.style.border = 'solid red';
  57. }
  58. else {
  59. job.remove();
  60. }
  61. }
  62. });
  63. }
  64. });
  65. });
  66. });
  67. }).observe(document.body, { childList: true, subtree: true });
  68. })();