Headless Firefox futtatása Pythonból Seleniummal
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.