[PYTHON] Holen Sie sich mit Selenium Twitter-Lesezeichen auf CentOS

Da Twitter keine API für Lesezeichen bereitstellt, habe ich versucht, alle Lesezeichen mit Selenium abzurufen.

Umgebung


CentOS Linux release 7.7.1908
Python 3.6.8

Vorbereitung

Installieren Sie, was Sie brauchen

google-chrome Installieren Sie unter Bezugnahme auf diesen Artikel. ChromeDriver Seien Sie vorsichtig mit der zu installierenden Version. Wenn Sie es unachtsam ausdrücken, wird es nicht richtig funktionieren. Überprüfen Sie die ChromeDriver-Site und installieren Sie die Pip mit der angegebenen Version.

Beispiel


# google-chrome --version
Google Chrome 78.0.3904.108

# pip install chromedriver-binary==78.0.3904.105
# pip show chromedriver-binary
Name: chromedriver-binary
Version: 78.0.3904.105.0

# chromedriver-path
/usr/lib/python3.6/site-packages/chromedriver_binary (Wird später benötigt)

Selenium

# pip install selenium

Funktionsprüfung

Ich habe viele Optionen hinzugefügt, aber "--headless" und "--no-sandbox" können ausreichen. In meiner Umgebung habe ich eine Ausnahme ohne "--headless" bekommen. Der ausführbare Pfad gibt das Ergebnis des obigen Chromedriver-Pfads an. Ich habe einen Screenshot zur Bestätigung gespeichert.

test.py


import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.keys import Keys

options = Options()
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
options.add_argument('--disable-infobars')
options.add_argument('--disable-extensions')
options.add_argument('--disable-gpu')
options.add_argument('--headless')

driver = webdriver.Chrome(chrome_options=options, executable_path='/usr/lib/python3.6/site-packages/chromedriver_binary/chromedriver')

driver.get('https://www.google.com/')
time.sleep(3.0)
driver.save_screenshot('screenshot.png')

driver.close()
driver.quit()

Lesezeichenerfassung

Anmeldevorgang

option.add_argument('--user-data-dir='+os.path.abspath('profile'))

Wenn Sie das Profil angeben, das mit der obigen Option verwendet werden soll, wird das Cookie dort gespeichert, sodass Sie sich nicht jedes Mal anmelden müssen, wenn das Programm ausgeführt wird. Führen Sie in diesem Status die Twitter-Anmeldung von diesem Artikel nur einmal aus. Selbst wenn Sie der Meinung sind, dass Sie sich erfolgreich angemeldet haben, wird dies möglicherweise auf der Bestätigungsseite Ihrer E-Mail-Adresse beendet. Ich halte es daher für eine gute Idee, den interaktiven Modus zum Überprüfen des Bildschirms und der URL zu verwenden.

Erwerbsprozess

Tweet-Elemente werden dynamisch hinzugefügt / gelöscht, indem in der Twitter-Timeline und in den Lesezeichen gescrollt wird. Im folgenden Programm Holen Sie sich die URL des geladenen Tweets → Scrollen Sie so, dass der untere Tweet oben auf der Seite ist → Warten Sie, bis die Seite den Tweet geladen hat Die URL aller Tweets wird durch Wiederholen erhalten.

def get_list():
    driver.get('https://twitter.com/i/bookmarks')
    time.sleep(10.0)

    status_urls = []
    container_xpath = '//*[@id="react-root"]/div/div/div/main/div/div/div/div[1]/div/div[2]/section/div/div/div'
    container = driver.find_element_by_xpath(container_xpath) #Vertikales Element mit mehreren Tweets
    end_count = 0
    while True:
        divs = container.find_elements_by_xpath('./div')
        for div in divs:
            if len(div.find_elements_by_tag_name('img')) == 0:
                end_count += 1
                break
            status_url = div.find_element_by_xpath('./div/article/div/div[2]/div[2]/div[1]/div[1]/a').get_attribute('href')
            status_urls.append(status_url)
        if end_count > 8:
            break
        driver.execute_script('arguments[0].scrollIntoView();', divs[-1])  # must check length
        print(len(status_urls))
        time.sleep(15.0)

    return list(set(status_urls))  #Da bei der Erfassungsmethode eine Duplizierung auftritt, wird diese durch einmaliges Festlegen eindeutig gemacht.

Wenn Sie zum Limit des Lesezeichens zurückkehren, wird der Tweet nicht im unteren Element gespeichert, sodass Sie beurteilen können, ob Sie mit div.find_elements_by_tag_name ('img') `bis zum Ende gescrollt haben. Es spielt keine Rolle, wie lange es dauert, also möchte ich alle abrufen. Es handelt sich also um einen redundanten Code, indem Sie schlafen und die Anzahl der Male angeben.

Zusammenfassung

Wenn Sie etwas falsch finden, kommentieren Sie bitte.

Die Seite, die ich als Referenz verwendet habe

Bis zum Ausführen von Selenium + Python unter CentOS7-Qiita Wenn Sie möchten, dass Ihre Site beim nächsten Start auf Selenium angemeldet bleibt Bot, um vom Twitter-Login mit Python Selenium --Qiita zu antworten

Recommended Posts

Holen Sie sich mit Selenium Twitter-Lesezeichen auf CentOS
Holen Sie sich nur Bild-Tweets auf Twitter
Installieren Sie Python unter CentOS mit Pyenv
Holen Sie sich Daten von Twitter mit Tweepy
Installieren Sie Python unter CentOS mit pyenv
Erhalten Sie Verzögerungsinformationen auf Twitter und twittern Sie
Programm, um Lieblingsbilder von Twitter zu erhalten
Holen Sie sich Bilder von bestimmten Benutzern auf Twitter
Twitter mit Python3
Versuchen Sie es mit Selen
Holen Sie sich Twitter userData
Grundeinstellungen für die Verwendung von Python3.8 und pip unter CentOS8
Automatisches Folgen auf Twitter mit Python und Selen! (RPA)
Lösung, wenn Heroku bei Verwendung von Selen abstürzt
Posten Sie mit der API auf Twitter in Ihrem Konto
Holen Sie sich die ASP Datepicker-Steuerung mit Python und Selen und automatisieren Sie sie
Installieren Sie Faiss unter CentOS 7
Anzahl der Charaktere auf Twitter
Installieren Sie numba unter CentOS 7.2
Starten Sie CentOS 8 mit VirtualBox
Installieren Sie mecab-python unter CentOS
Installieren Sie Python 2.7.3 unter CentOS 5.4
Suchen Sie Twitter mit Python
Installation auf der CentOS8 Virtual Box
Installieren Sie awscli auf centos7
Installieren Sie Chainer unter CentOS 6.7
Hinweise zur Verwendung von Alembic
Einrichten des Drehmoments unter CentOS 6
Holen Sie sich nur die Python-Version (z. B. 2.7.5) in die CentOS 7-Shell
Holen Sie sich eine englische Übersetzung mit Python Google Translation Selen (Hinweis)