Pythonでジモティーの自動投稿ツール作ってみた

この記事で解決するお悩み
  • Pythonを使って広告掲示板「ジモティー」の投稿を自動化させたい
  • selenium・ChromeDriverを使ってブラウザ操作したい

Pythonの「selenium」というライブラリを使って、無料の広告掲示板「ジモティー」に自動で掲示板を投稿していくプログラムをご紹介します。今回は、ブラウザの起動から、ジモティーへのログイン、投稿内容の入力、実際に投稿、という一連の作業を自動で行なっていきます。ソースコードも載せてあり、コピペで簡単に実行・カスタマイズできるので、Pythonを使い慣れていない方にもおすすめの内容となっております。

完成系イメージ

下記動画のように、ブラウザの起動、ログイン、投稿画面への遷移、投稿内容の入力、投稿、を自動で行うことができるツールとなっております。

事前準備

事前準備として、下記の内容を進めておきましょう。

  1. ジモティー会員登録
  2. ChromeDriverのダウンロード
  3. seleniumのインストール

1. ジモティー会員登録

予めジモティー公式HPから会員登録を行ないましょう。この時、ログインID(メールアドレス)およびログインパスワードは必ず控えるようにしてください。

2. ChromeDriverのダウンロード

ChromeDriverとは、Google Chromeのブラウザ操作をするうえで必須のソフトです。のちに解説する「selenium」というPythonのライブラリを使ってこのソフトを動かして、ブラウザ操作をしていきます。

ダウンロード方法

こちらのダウンロードページよりダウンロードください。ご自身のお使いのOS(Windows・Mac)、Google Chromeのバージョンに合わせたDriverソフトのダウンロードが必要です

seleniumのインストール

ご自身のPCにpip installで「selenium」をインストールしておきましょう。
「selenium」とは、ブラウザ操作を可能にするPythonのライブラリのことで、これを使うことによって、人が手作業で入力・選択していたWeb上での作業を、Pythonで自動化させることができます。

コマンドプロンプト(Windows)もしくは、ターミナル(Mac)で下記インストールを実行してください。

pip install selenium

ジモティー投稿画面

上記キャプチャーの青枠で囲まれた箇所を今回カスタマイズ・自動入力していきます。

  • 売ります・あげますのカテゴリ
  • 商品価格
  • タイトル
  • 内容
  • 出品エリア(都道府県・市区郡)
  • 受け渡し方法(配送料)

Pythonソースコード

早速、Pythonの全コードになります。ハイライトされた9行目、10行目をご自身のログインIDとパスワードに変更してください。また22行目のChromeDriverのパスについては、先ほどダウンロードしてきたChromeDriverのパス(ディレクトリ)を指定してください。ソースコードの中身については、順番に解説していきます。

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.select import Select

import time


#ログイン情報を入力
LoginID = "xxxx@gmail.com"
LoginPass = "xxxxxxx"

#投稿内容を入力
PostCategory = "家電" #カテゴリ
PostPrice = 1000 #商品価格
PostPrefecture = "埼玉県" #都道府県
PostCity = "川越市" #市区郡
PostTitle = "炊飯器" #投稿タイトル
PostContent = "SHARP2019年製の〇〇です!" #投稿内容
DeliveryPrice = 500 #配送料

#Chromeを起動
browser = webdriver.Chrome("/Users/XXXXX/chromedriver")
browser.get("https://jmty.jp/users/sign_in")
browser.maximize_window()

#ログイン
email_elem = browser.find_element_by_id("user_email")
email_elem.send_keys(LoginID)
pw_elem = browser.find_element_by_id("user_password")
pw_elem.send_keys(LoginPass)
pw_elem = browser.find_element_by_id("submit_button")
pw_elem.click()
time.sleep(3)


#投稿ページに遷移
post_elem = browser.find_element_by_link_text("投稿画面へ(無料)")
post_elem.click()
time.sleep(3)

#カテゴリの選択
dropdown = browser.find_element_by_id('article_category_id')
select = Select(dropdown)
select.select_by_visible_text(PostCategory)

#価格の入力
input_value = browser.find_element_by_id('article_price')
input_value.send_keys(PostPrice)
#タイトルの入力
input_str = browser.find_element_by_id('article_title')
input_str.send_keys(PostTitle)
#内容の入力
input_str = browser.find_element_by_id('article_text')
input_str.send_keys(PostContent)

#都道府県の入力
dropdown = browser.find_element_by_id('article_prefecture_id')
select = Select(dropdown)
select.select_by_visible_text(PostPrefecture) 
time.sleep(1)
dropdown = browser.find_element_by_id('article_city_id')
select = Select(dropdown)
select.select_by_visible_text(PostCity)

#配送情報の入力
click_elem = browser.find_element_by_id('article_delivery_option_attributes_by_seller')
if click_elem.is_selected():
    pass
else:
    click_elem.click()
time.sleep(1)
input_value = browser.find_element_by_id('article_delivery_option_attributes_seller_carriage')
input_value.clear()
input_value.send_keys(DeliveryPrice) 
time.sleep(2)

#投稿
post_elem = browser.find_element_by_id('article_submit_button')
post_elem.click()

投稿内容の入力

投稿する内容を入力してください。これらの項目は投稿に必須となります。またカテゴリや地域については、プルダウンで選択できる以外の内容を入力するとエラーとなるので、必ずプルダウン選択肢の中からお選びください。

#投稿内容を入力
PostCategory = "家電" #カテゴリ
PostPrice = 1000 #商品価格
PostPrefecture = "埼玉県" #都道府県
PostCity = "川越市" #市区郡
PostTitle = "炊飯器" #投稿タイトル
PostContent = "SHARP2019年製の〇〇です!" #投稿内容
DeliveryPrice = 500 #配送料
カテゴリのプルダウンリスト

ChromeDriverの起動

ChromeDriverを起動するには、ダウンロードしてきたドライバーのパスを指定して起動させる必要があります。

#Chromeを起動
browser = webdriver.Chrome("/Users/XXXXX/chromedriver")
browser.get("https://jmty.jp/users/sign_in")
browser.maximize_window()

ログイン

事前に入力したログイン情報をもとに、ログインを行います。

まず、起動したChromeDriverに対し、seleniumのfind_element_by_id() を使ってログイン情報を入力する箇所や、ログインボタンを探します。
次に、ログイン情報を渡すことができる、send_keys()や、クリックができるclick()を使ってログインしていきます。
最後に、”投稿画面へ(無料)”というボタンを探してクリックして投稿画面に遷移します。

なお、ここでは通信環境やPC処理時間を考慮してtime.sleep()を使ってある程度待ち時間を作るようにしています。

#ログイン
email_elem = browser.find_element_by_id("user_email")
email_elem.send_keys(LoginID)
pw_elem = browser.find_element_by_id("user_password")
pw_elem.send_keys(LoginPass)
pw_elem = browser.find_element_by_id("submit_button")
pw_elem.click()
time.sleep(3)

#投稿ページに遷移
post_elem = browser.find_element_by_link_text("投稿画面へ(無料)")
post_elem.click()
time.sleep(3)

投稿内容入力

基本的に投稿画面では以下の3つの入力方法があります。

  • プルダウンによる選択
  • 値やテキストの直接入力
  • チェックボックスによる選択/非選択

プルダウンによる選択

カテゴリや都道府県の入力の際に使われます。

まず、ログイン時と同様、find_element_by_id()で対象の項目を探します。
次に、その項目をSelect()で選択します。
最後に、select_by_visible_text()で予め入力しておいた投稿内容をプルダウンリストから選んで終わりです。

値やテキストの直接入力

商品価格やタイトル・内容の入力などに使われます。

まず、ログイン時と同様、find_element_by_id()で対象の項目を探します。
次に、send_keys()を使って直接、テキストや数字を渡せば終わりです。

選択ボックスの選択/非選択

配送情報を選択・非選択する際に使われます。

find_element_by_id()で選択ボックスを探すまでは同じですが、非選択時にclick()を実行すると、チェックボックスを選択状態にすることができます。

#カテゴリの選択
dropdown = browser.find_element_by_id('article_category_id')
select = Select(dropdown)
select.select_by_visible_text(PostCategory)

#価格の入力
input_value = browser.find_element_by_id('article_price')
input_value.send_keys(PostPrice)
#タイトルの入力
input_str = browser.find_element_by_id('article_title')
input_str.send_keys(PostTitle)
#内容の入力
input_str = browser.find_element_by_id('article_text')
input_str.send_keys(PostContent)

#都道府県の入力
dropdown = browser.find_element_by_id('article_prefecture_id')
select = Select(dropdown)
select.select_by_visible_text(PostPrefecture) 
time.sleep(1)
dropdown = browser.find_element_by_id('article_city_id')
select = Select(dropdown)
select.select_by_visible_text(PostCity)

#配送情報の入力
click_elem = browser.find_element_by_id('article_delivery_option_attributes_by_seller')
if click_elem.is_selected():
    pass
else:
    click_elem.click()
time.sleep(1)
input_value = browser.find_element_by_id('article_delivery_option_attributes_seller_carriage')
input_value.clear()
input_value.send_key

投稿

最後は、find_element_by_id()で投稿ボタンを探して、クリックすることで投稿が完了できます。

#投稿
post_elem = browser.find_element_by_id('article_submit_button')
post_elem.click()

コメントを残す

メールアドレスが公開されることはありません。