TwitterにSeleniumで自動投稿

from selenium import webdriver

from selenium.webdriver.common.by import By

from selenium.webdriver.common.keys import Keys

from selenium.webdriver.support.select import Select

import chromedriver_binary

import time

import urllib

import os

import sys

import requests

#wordpressから要素を取得

driver = webdriver.Chrome()

driver.get(‘https://bijo.blog/’)

h3 = driver.find_element(By.XPATH,’/html/body/main/article[1]/dl/dd/a/h3′)

link = driver.find_element(By.XPATH,’/html/body/main/article[1]/dl/dt/a’)

thumbnail = driver.find_element(By.XPATH,’/html/body/main/article[1]/dl/dt/a/img’).get_attribute(‘src’)

path_img = ‘C:/Users/wiki1/Desktop/xxx.jpg’

with open(path_img, ‘wb’) as f:

    f.write(requests.get(thumbnail).content)

#変数

username = ‘@snowbreak_news’

password = ‘password8**’

text = h3.text

url_wp = link.get_attribute(‘href’)

#ログイン処理

SELENIUmでNoSuchElementになる原因一覧が下記URLに書かれている今回は、ログイン画面の「Googleでログイン」部分がiframeになっているので、XPATHで指定してもNoSuchElementになってしまったhttps://tkstock.site/2022/08/14/python-selenium-unable-to-locate-element-iframe-switch/https://tkstock.site/2022/06/14/python-selenium-developpertool-no-such-a-element/
次の2つのコードは「次へ」がaタグの場合なら有効だが、divタグなので効かなかったfind_element(By.LINK_TEXT,’次へ’).click()find_element(By.PARTIAL_LINK_TEXT,’次へ’).click()「COPY XPATH」でやるとエラーになるので、By.NAMEやdata-testidなどで指定しているちなみに、By.NAMEは<input name=’text’>から指定

driver = webdriver.Chrome()

driver.get(‘https://twitter.com/login’)

time.sleep(6)

driver.find_element(By.NAME,’text’).send_keys(username)

time.sleep(1)

driver.find_element(By.XPATH,’//div/span/span[text()=”次へ”]’).click()

time.sleep(3)

driver.find_element(By.NAME,’password’).send_keys(password)

time.sleep(1)

driver.find_element(By.XPATH,’//div/span/span[text()=”ログイン”]’).click()

time.sleep(6)

#投稿画面に遷移

driver.find_element(By.XPATH,’//a[@data-testid=”SideNav_NewTweet_Button”]’).click()

time.sleep(6)

#投稿画面でテキストを追加

driver.find_element(By.CLASS_NAME,’public-DraftEditor-content’).send_keys(text)

driver.find_element(By.CLASS_NAME,’public-DraftEditor-content’).send_keys(Keys.ENTER)

driver.find_element(By.CLASS_NAME,’public-DraftEditor-content’).send_keys(url_wp)

time.sleep(3)

#投稿画面で画像を追加

driver.find_element(By.XPATH,’//input[@data-testid=”fileInput”]’).send_keys(path_img)

time.sleep(3)

#予約投稿

driver.find_element(By.XPATH,’//div[@data-testid=”scheduleOption”]’).click()

time.sleep(3)

selector_1 = driver.find_element(By.XPATH,’//select[@id=”SELECTOR_1″]’)

s1 = Select(selector_1)

s1.select_by_index(10)

time.sleep(1)

selector_2 = driver.find_element(By.XPATH,’//select[@id=”SELECTOR_2″]’)

s2 = Select(selector_2)

s2.select_by_index(10)

time.sleep(1)

selector_4 = driver.find_element(By.XPATH,’//select[@id=”SELECTOR_4″]’)

s4 = Select(selector_4)

s4.select_by_index(10)

time.sleep(1)

selector_5 = driver.find_element(By.XPATH,’//select[@id=”SELECTOR_5″]’)

s5 = Select(selector_5)

s5.select_by_index(10)

time.sleep(3)

#予約確定ボタンをクリック

driver.find_element(By.XPATH,’//div[@data-testid=”scheduledConfirmationPrimaryAction”]’).click()

#投稿ボタンをクリック

driver.find_element(By.XPATH,’//div[@data-testid=”tweetButton”]’).click()

time.sleep(3)