mass-client 1.0.37 → 1.0.38

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/base-line/source.rb +33 -13
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 67027afe2fef86af66ff60e4769abd707be08a8a61e740ef0d6f04e470d51913
4
- data.tar.gz: c9bb5842dc11e23453a0acf8cdf7c0ab51975caf31b35b05d7cd921aa0c162fd
3
+ metadata.gz: 79a458ee1f713c73e4567171dc2df8fe348612f4acb64b46987d9efbd941ee5c
4
+ data.tar.gz: 5cdd47bfa69af7dafd52681b64fdd4609d3d3a2c03804dcb20ac7459af2de959
5
5
  SHA512:
6
- metadata.gz: acd01bf5c2a0a1c676b70443bb55e4fc5984c8d833b5a9230cb5723d960f0deec0d6093552e8da13b06dee0e3eb433c9c8032e14d2064aefdf3429487275461b
7
- data.tar.gz: d4bab2f9b7bc735a4998f362037f028e9cc1d1d67f5bbb0fb4ade42a6b98966250cf0bd2a77cafde988942682c595479367ef3a3c1583621e36e5b88dd5dcaf5
6
+ metadata.gz: 40bc64016ace0f97d2a8b6b3b48c85c67cfce7039f6852301be029d2a8a9ba565c6a2520bec6b5b4139a37bcc1c6ba61e24bc0d9444a2e2b36406764e2c11242
7
+ data.tar.gz: 8d07063dd8c65e0a8a6831b3303ac953ddcb9e70f426259e0edb8f332b47b2e4728d755908a7fd94e241c5021a2c3a056a6745b427944384bb3f26b8fc1f0cde
@@ -87,27 +87,43 @@ module Mass
87
87
 
88
88
  # scroll down the page until N event elements are showed up
89
89
  def show_up_event_elements(job:, event_limit:, max_scrolls:, take_screenshots: false, logger:nil)
90
- l = logger || BlackStack::DummyLogger.new(nil)
91
- driver = job.profile.driver
92
- # scroll down
93
- i = 0
94
- prev_n_events = 0
95
- security_height = 150
96
- lis = self.event_elements(job: job)
97
- n_events = lis.size
98
- while (i<max_scrolls || n_events>prev_n_events) && n_events<event_limit
90
+ l = logger || BlackStack::DummyLogger.new(nil)
91
+ driver = job.profile.driver
92
+ # scroll down
93
+ i = 0
94
+ prev_n_events = 0
95
+ security_height = 150
96
+ lis = self.event_elements(job: job)
97
+ n_events = lis.size
98
+ while (i<max_scrolls || n_events>prev_n_events) && n_events<event_limit
99
99
  i += 1
100
100
 
101
101
  prev_n_events = n_events
102
102
  lis = self.event_elements(job: job)
103
103
  n_events = lis.size
104
-
105
- # scroll down the exact height of the viewport
104
+
105
+ # scroll down the exact height of the viewport or the feed container
106
106
  # reference: https://stackoverflow.com/questions/1248081/how-to-get-the-browser-viewport-dimensions
107
107
  l.logs "Scrolling down (#{i.to_s.blue}/#{max_scrolls.to_s.blue} - #{n_events.to_s.blue}/#{event_limit.to_s.blue} events showed up)... "
108
108
  step = self.desc['scrolling_step'] + rand(self.desc['scrolling_step_random'].to_i)
109
+
110
+ # old DOM
109
111
  driver.execute_script("window.scrollTo(0, #{i.to_s}*#{step})")
110
- #driver.execute_script("window.scrollTo(0, #{i.to_s}*(Math.max(document.documentElement.clientHeight || 0, window.innerHeight || 0)-#{security_height}))")
112
+
113
+ # new DOM
114
+ # Use a more robust script: compute a rounded pixel amount and try to scroll
115
+ # the main/feed container first (typical for SPA like LinkedIn). Fall back to
116
+ # document.scrollingElement or window if necessary.
117
+ script = <<~JS
118
+ var amount = Math.round(#{i} * #{step});
119
+ var el = document.querySelector('main') || document.querySelector('div[role="main"]') || document.querySelector('div[aria-label="Feed"]') || document.scrollingElement || document.documentElement || document.body;
120
+ if (el && typeof el.scrollTo === 'function') {
121
+ el.scrollTo(0, amount);
122
+ } else {
123
+ window.scrollTo(0, amount);
124
+ }
125
+ JS
126
+ driver.execute_script(script)
111
127
  sleep(5)
112
128
  l.logf "done".green
113
129
 
@@ -122,7 +138,11 @@ module Mass
122
138
  else
123
139
  l.no
124
140
  end
125
- end
141
+ end # while
142
+ # If we exited because we reached the maximum number of scrolls
143
+ if i >= max_scrolls && n_events < event_limit
144
+ raise "Maximum scrolls (#{max_scrolls}) reached. Only #{n_events} events found."
145
+ end
126
146
  end
127
147
 
128
148
  # Return a hash desriptor of the events found.
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mass-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.37
4
+ version: 1.0.38
5
5
  platform: ruby
6
6
  authors:
7
7
  - Leandro Daniel Sardi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-11-03 00:00:00.000000000 Z
11
+ date: 2025-12-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: timeout