LinkedIn: headless mode, scroll all 25 cards one-by-one

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
main
I Luk Kim 5 months ago
parent 89ca7a4006
commit b28e204d80

@ -21,14 +21,17 @@ class LinkedInAdapter(ManifestDrivenAdapter):
@staticmethod @staticmethod
def _scroll_to_load(page) -> None: def _scroll_to_load(page) -> None:
"""Scroll each job card into view to force LinkedIn's virtual list to render.""" """Scroll each card into view one by one so LinkedIn renders all occluded items."""
try: try:
page.evaluate("""() => { count = page.evaluate(
const cards = Array.from(document.querySelectorAll('li[data-occludable-job-id]')); "document.querySelectorAll('li[data-occludable-job-id]').length"
cards.forEach(card => card.scrollIntoView({ behavior: 'instant', block: 'center' })); )
}""") for i in range(count):
page.wait_for_timeout(800) page.evaluate(f"""() => {{
page.evaluate("window.scrollTo(0, 0)") const cards = document.querySelectorAll('li[data-occludable-job-id]');
page.wait_for_timeout(400) if (cards[{i}]) cards[{i}].scrollIntoView({{behavior: 'instant', block: 'center'}});
}}""")
page.wait_for_timeout(120)
logger.debug(f"[linkedin] Scrolled through {count} cards")
except Exception as e: except Exception as e:
logger.debug(f"[linkedin] scroll_to_load failed: {e}") logger.debug(f"[linkedin] scroll_to_load failed: {e}")

@ -12,7 +12,7 @@ browser:
profile_mode: persistent_chrome_profile profile_mode: persistent_chrome_profile
profile_name: JobAgent profile_name: JobAgent
headed_on_learn: true headed_on_learn: true
headless_on_run: false headless_on_run: true
search: search:
keyword_mode: url_param keyword_mode: url_param

Loading…
Cancel
Save