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)