为什么我在 45 次操作后仍然出现错误 - LinkedIn URLs

问题描述 投票:0回答:1

我使用selenium等在python中编写了一段代码来打开LinkedIn url以获取登录url。一切都按预期工作,但在将 45 个网址导入 OUT.csv 后,出现错误

Message: invalid session id
其中一部分来自chatgpt,但即使是AI也无法帮助我解决这一问题。 顺便提一句。我对 python 及其用法还很陌生。

import pandas as pd
from selenium import webdriver
from selenium.common.exceptions import WebDriverException
from selenium.webdriver.chrome.options import Options
import time
import random

# Funkce pro získání aktualizované URL po 5 sekundách
def ziskat_aktualizovanou_url(driver, url):
    try:
        time.sleep(5)  # Počkejte 5 sekund
        aktualizovana_url = driver.current_url
    except Exception as e:
        print(f"Chyba při získávání aktualizované URL pro {url}: {str(e)}")
        aktualizovana_url = None
    
    return aktualizovana_url

# Nastavte Chrome možnosti s vypnutou GPU
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("--disable-extensions")
# Použijte správnou cestu k vašemu ChromeDriveru
driver_path = '/Users/martas02/Desktop/python/chromedriver'

# Inicializujte webdriver s použitím Chrome možností
def initialize_driver():
    return webdriver.Chrome(options=chrome_options)

# Čítač pro sledování zpracovaných URL
url_counter = 0

# Pokusí se inicializovat driver a spustit hlavní část kódu
try_count = 0
MAX_RETRIES = 3
while try_count < MAX_RETRIES:
    try:
        # Initialize WebDriver
        driver = initialize_driver()

        # Přečtěte původní CSV soubor
        df = pd.read_csv('IN.csv', sep='\t')  # Předpokládáme, že CSV je odděleno tabulátorem sep='\t'

        # Určete index sloupce obsahující URL (předpokládáme, že je to čtvrtý sloupec)
        url_column_index = 3  # Použijte 3 místo 2

        # Zkontrolujte, zda je zadaný index sloupce platný
        if url_column_index < len(df.columns):
            # Vytvořte nový DataFrame pouze s URL zadaným sloupcem
            raw_df = pd.DataFrame({df.columns[url_column_index]: df.iloc[:, url_column_index]})

            # Uložte DataFrame pouze s URL do nového CSV souboru ('RAW.csv')
            raw_df.to_csv('RAW.csv', index=False)

            # Zpracujte URL z 'RAW.csv' a uložte skutečné URL do 'OUT.csv'
            out_df = pd.DataFrame(columns=['Skutecne_URL'])

            for i, url in enumerate(raw_df.iloc[:, 0]):
                try:
                    driver.get(url)
                    
                    # Upravte čekací dobu na základě indexu
                    wait_time = 20 if i == 0 else 40
                    
                    aktualizovana_url = ziskat_aktualizovanou_url(driver, url)
                    
                    if aktualizovana_url is not None:
                        out_df = pd.concat([out_df, pd.DataFrame({'Skutecne_URL': [aktualizovana_url]})], ignore_index=True)
                        random_time = random.randint(10,30)
                        # Zvětšte čítač po zpracování URL
                        url_counter += 1
                        time.sleep(random_time)

                        # Zkontrolujte, zda bylo zpracováno 900 URL
                        if url_counter == 100:
                            print("Zpracoval jsem prvních 100 a budu pokračovat opět za 24 hodin")
                            time.sleep(24 * 60 * 60)  # Pauza na 24 hodin
                            url_counter = 0  # Resetujte čítač
                            
                            # Uložte DataFrame se skutečnými URL do nového CSV souboru ('OUT.csv')
                            out_df.to_csv('OUT.csv', index=False)

                except Exception as e:
                    print(f"Chyba při zpracování URL {url}: {str(e)}")

            # Uložte DataFrame se skutečnými URL do nového CSV souboru ('OUT.csv')
            out_df.to_csv('OUT.csv', index=False)

            # Přidejte získaná data do souboru 'IN.csv' ve sloupci 37
            df['SLoupec37'] = out_df['Skutecne_URL']
            df.to_csv('IN.csv', sep='\t', index=False)

            # Zavřete Chrome webdriver
            zavreni = input("Zavreni: Y/N")
            if zavreni.lower() == 'y':
                driver.quit()
            else:
                break  # Ukončí smyčku, pokud uživatel nechce zavřít prohlížeč
        else:
            print(f"Neplatný index sloupce: {url_column_index}")

        # If the script reaches this point without errors, break out of the retry loop
        break
    except WebDriverException as e:
        print(f"WebDriverException occurred: {str(e)}")
        try_count += 1
        if try_count == MAX_RETRIES:
            print("Max retries exceeded. Exiting.")
            break
        else:
            print("Retrying...")
            continue
    except Exception as e:
        print(f"Error occurred: {str(e)}")
        break

python google-chrome selenium-webdriver linkedin-api
1个回答
0
投票

因此,一般来说,大多数主要平台,如 LinkedIn、Facebook、X...都实施了会话限制等,以打击网络抓取机器人等。

我不知道您到底想通过访问实现什么目的,但请在此处查看 LinkedIn API:https://developer.linkedin.com/ 寻求帮助。

© www.soinside.com 2019 - 2024. All rights reserved.