Невозможно перейти на следующую страницу в LinkedIn при извлечении селена и красивого супаPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Невозможно перейти на следующую страницу в LinkedIn при извлечении селена и красивого супа

Сообщение Anonymous »

Вот шаги, которые я предпринял для решения этой проблемы:
Изначально вы пытались получить данные из LinkedIn с помощью Selenium с Chrome WebDriver. Однако вы столкнулись с проблемой, когда код не смог перейти на следующую страницу из-за сообщения об ошибке.
Вы попытались изменить код, включив логику разбиения на страницы, обнаруженную в Stack Overflow, в частности, используя WebDriverWait и ожидаемые_условия для ожидания. чтобы кнопка следующей страницы была доступна для нажатия перед нажатием на нее. Однако это изменение также привело к ошибке.
Вы попытались запустить код на Firefox WebDriver вместо Chrome WebDriver, надеясь, что это поможет решить проблему с переходом на следующую страницу. Однако вы все равно столкнулись с той же ошибкой.
`import time
from datetime import datetime
from bs4 import Beautiful Soup
import pandas as pd
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from webdriver_manager.chrome import ChromeDriverManager

source = "linkedin.com"

def get_url(keyword):
"""
Generate URL from keyword.
"""
keyword = keyword.replace(' ', '%20')
url = f"https://www.linkedin.com/search/results ... s={keyword}"
return url

def get_record(card):
"""
Extract candidate data from a single record.
"""
name_tag = card.find('span', class_='entity-result__title-text')
name = name_tag.find('span', attrs={'aria-hidden': 'true'}).get_text(strip=True) if name_tag else ''

title_tag = card.find('div', class_='entity-result__primary-subtitle')
title = title_tag.get_text(strip=True) if title_tag else ''

location_tag = card.find('div', class_='entity-result__secondary-subtitle')
location = location_tag.get_text(strip=True) if location_tag else ''

profile_link_tag = card.find('a', class_='app-aware-link')
profile_url = profile_link_tag['href'] if profile_link_tag else ''
if not profile_url.startswith('https://www.linkedin.com'):
profile_url = 'https://www.linkedin.com' + profile_url

record = (name, title, location, profile_url)
return record

def login_to_linkedin(driver, username, password):
"""
Logs into LinkedIn using provided credentials.
"""
driver.get("https://www.linkedin.com/login")
time.sleep(3)

username_field = driver.find_element(By.ID, 'username')
password_field = driver.find_element(By.ID, 'password')
login_button = driver.find_element(By.XPATH, '//button[@type="submit"]')

username_field.send_keys(username)
password_field.send_keys(password)
login_button.click()
time.sleep(3)

def get_candidates(keyword, username, password, num_candidates=100):
"""
Creates a DataFrame with all records (scraped candidates), scraping from all pages.
"""
url = get_url(keyword)
records = []

# Set up Selenium WebDriver with Chrome
options = Options()
options.headless = False # Set to True if you do not need to see the browser
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options)

# Log in to LinkedIn
login_to_linkedin(driver, username, password)

while len(records) < num_candidates:
print(f"Fetching page: {url}")
driver.get(url)
time.sleep(5) # Allow time for the page to load

soup = BeautifulSoup(driver.page_source, 'html.parser')
cards = soup.find_all('div', class_='entity-result__divider')

for card in cards:
record = get_record(card)
records.append(record)

print(f"Number of candidates found on this page: {len(cards)}")
print(f"Total candidates collected: {len(records)}")

if len(records) >= num_candidates:
break

# Handle pagination to go to the next page
try:
next_button = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, '//button[contains(@aria-label, "Next")]'))
)
next_button.click()
time.sleep(5) # Allow time for the next page to load
except Exception as e:
print(f"Exception encountered while trying to navigate to next page: {e}")
break

driver.quit()

# Save the data as DataFrame
columns = ['name', 'title', 'location', 'profile_url']
df = pd.DataFrame(data=records[:num_candidates], columns=columns)

# Adding to DataFrame columns with search parameters
search_time = datetime.now().strftime("%d/%m/%Y, %H:%M:%S")
df["search_time"] = search_time
df["search_keyword"] = keyword
df["source"] = source

return df

# LinkedIn credentials
username = "oluseyeoyeniran@gmail.com"
password = "july1981"

# Search keyword for candidates open to work in Africa
keyword = "#opentowork #Microsoft - Seeking 'Africa"

# Example usage
df = get_candidates(keyword, username, password)
df.head()
`


Подробнее здесь: https://stackoverflow.com/questions/785 ... nium-and-b
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»