我使用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
因此,一般来说,大多数主要平台,如 LinkedIn、Facebook、X...都实施了会话限制等,以打击网络抓取机器人等。
我不知道您到底想通过访问实现什么目的,但请在此处查看 LinkedIn API:https://developer.linkedin.com/ 寻求帮助。