Természetesen ez az oldal is használ cookie-kat.
Nem tetszik?

Nem, elmegyek
home

T  h  e
D a r k
S i t e

Magánjellegű internetes dokumentációs és publikációs felület és kísérleti weboldal a Morkpy tartalomkezelő rendszer fejlesztési folyamatainak tesztelésére és szemléltetésére

Headless Firefox futtatása Pythonból Seleniummal

dark Dokumentáció 2021-01-15 11:22:00

Ezt csináljuk akkor, mikor nem elég a wgettel letöltött html forrás, mert kell a javascriptes, iframe-es tartalom is.


Szerezzük meg például megadott weboldal Facebook megosztásainak, vagy számát rendkívül elegáns módon.

Előkészület

Létrehozunk egy Python venvet és telepítjük a selenium nevű csomagot. Letöltjük a mozilla geckodriver t és telepítjük a Firefox ot, ha még nem tettük volna. Grafikus felületre nem lesz szükség.

Aztán

#!/usr/bin/env venv/bin/python
import os
import sys

from selenium.webdriver import Firefox
from selenium.webdriver.common.by import By
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.firefox.webelement import FirefoxWebElement
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.ui import WebDriverWait

options: Options = Options()
options.headless = True
executable_path = os.path.join(os.path.dirname(__file__), 'geckodriver')
url: str = sys.argv[1]

driver: Firefox = Firefox(options=options, executable_path=executable_path)
driver.get(url)
fbframe: FirefoxWebElement = WebDriverWait(driver, 10).until(
    expected_conditions.presence_of_element_located(
        (By.XPATH, '//iframe[starts-with(@data-testid, "fb:like")]')))
driver.switch_to.frame(fbframe)
span: FirefoxWebElement = WebDriverWait(driver, 10).until(
    expected_conditions.presence_of_element_located((By.ID, 'u_0_3')))
print(span.text)

driver.close()
driver.quit()

Megjegyzés

A szkriptet futtató felhasználónak kell, hogy legyen írási joga a home könyvtárára - ugye a www-data usernek nem szokott lenni - ennélkül nem fog működni. A home könyvtárban jön létre a .cache és a Firefox profilt tartalmazó .mozilla alkönyvtár.