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
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
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()
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.
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.
Wenn Sie etwas falsch finden, kommentieren Sie bitte.
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