Klick mit pyppeteer simulieren

English Deutsch

Um einen Button oder einen Link mit der pyppeteer-Bibliothek zu klicken, können Sie page.evaluate() verwenden.

Wenn Sie ein <button>-Element oder einen Link (<a>) wie

button_example.html
<button id="mybutton">

können Sie

pyppeteer_click_eval.js
# Jetzt den Such-Button klicken
await page.evaluate(f"""() => {{
    document.getElementById('mybutton').dispatchEvent(new MouseEvent('click', {{
        bubbles: true,
        cancelable: true,
        view: window
    }}));
}}""")

verwenden, um ein MouseEvent zu erzeugen, das einen Klick simuliert. Beachten Sie, dass page.evaluate() jeden Javascript-Code ausführt, den Sie übergeben, sodass Sie Ihre Javascript-Kenntnisse einsetzen können, um den gewünschten Effekt zu erzeugen

Siehe auch https://gomakethings.com/how-to-simulate-a-click-event-with-javascript/ für weitere Details zur Simulation von Mausklicks in reinem Javascript ohne jQuery.

Beachten Sie, dass page.evaluate() einfach jeden Javascript-Code ausführt, den Sie ihm geben, sodass Sie Ihre Javascript-Kenntnisse einsetzen können, um die Seite zu manipulieren.

Vollständiges Beispiel

Dieses Beispiel öffnet https://techoverflow.net, gibt einen Suchbegriff in das Suchfeld ein, klickt auf den Such-Button und erstellt dann einen Screenshot

pyppeteer_click_full_example.py
import asyncio
from pyppeteer import launch

async def main():
    browser = await launch()
    page = await browser.newPage()
    await page.goto('https://techoverflow.net')

    # Inhalt in das Suchfeld einfügen
    content = "pypetteer"
    await page.evaluate(f"""() => {{
        document.getElementById('s').value = '{content}';
    }}""")

    # Jetzt den Such-Button klicken
    await page.evaluate(f"""() => {{
        document.getElementById('searchsubmit').dispatchEvent(new MouseEvent('click', {{
            bubbles: true,
            cancelable: true,
            view: window
        }}));
    }}""")

    # Warten, bis die Suchergebnisseite geladen wurde
    await page.waitForSelector(".archive-title")

    # Jetzt Screenshot erstellen und beenden
    await page.screenshot({'path': 'screenshot.png'})
    await browser.close()

asyncio.get_event_loop().run_until_complete(main())

Das Ergebnis sieht so aus:

Pyppeteer-Screenshot, der Suchergebnisse nach simuliertem Button-Klick zeigt


Check out similar posts by category: Pyppeteer, Python