pythonでできることの1つが自動化です。
今回はYahooオークションの出品の自動化を紹介していきます。
本記事はこんな方におすすめです。

Yahooオークションの出品を自動化したい
本記事の内容
- seleniumについて
- chromeドライバーのダウンロード
- 必要なライブラリ
- 実装
この記事を読むと、Yahooオークションの自動化ができます!
もちろん、ウェブ操作の自動化がわかります。
こんな感じで、1千万の写真(フリー素材)の出品を自動で処理します。
python embeddable の環境もセットの場合は、次のリンクを参照ください。
seleniumについて
seleniumはウェブ操作を自動化するライブラリです。
pythonだけでなく、java,ruby,C#,java scriptなどにも対応しております。
ウェブ操作を自動化とは
ウェブ操作の自動化とはどういうことでしょうか?
皆さんは、ウェブブラウザのテキストやボタンに対して、入力、押すと操作します。
これをpython(プログラム)で行うことです。
プログラムですることは、ボタンなどの「要素」を指定して、「操作」します。
とても、シンプルです!!
インストール
pythonの環境にpipでインストールしましょう。
1 |
pip install selenium |
chrome driver
今回操作するブラウザはGoogle Chromeを使います。
インストールがまだな方は、インストールしてください。
Chromeのバージョン確認
Chromeのバージョンを確認します。
次のchrome driverのダウンロードで必要になります。
Chromeを起動したら、右上のチョボ3つを押して、設定を開きます。
Chromeについてから、バージョンを確認しましょう。
次は、chrome driverです。先程のとは別です。
pythonのプログラムで読み込むものです。
ダウンロード
下記リンクよりchrome driverをダウンロードしてください。
現状のChromeのバージョンに対応したものを選択してください。
OSにあったものをダウンロードしてください。
実装方法
では、早速実装して行きましょう。
準備
サンプルコードのように、コードファイルや商品画像、Chrome driverを配置します。
コードのファイルはダウンロードすれば、中にコードが書いてあります。
空のファイルを用意して、記事読みながら、コード書いてもらってもOKです。
要素の取得
要素がわからないと、プログラムが書けないので、まず要素の取得方法から紹介します。
ブラウザを開いたら、チョボ三つ>その他ツール>デベロッパーツールを選びます。
右に開発用の画面が出てきます。
エレメント選択ボタンを押したあと、操作したい要素をクリックします。
すると開発画面の文字がハイライトされます。
これが、テキストやボタンの要素のコードです。
ここのid = ""、name=""、class=""などを参考にします。
xpathというもので、要素を指定することもあります。
その場合は、ハイライトした要素を右クリックして、CopyからXpath、full Xpathを選びます。
注意ポイント
要素は自分で探せるようにしておいてください。
ウェブでは、アプリケーション更新とかで、要素名が変わることがあります。
pythonでの要素の読み込み
上記で要素がわかれば、あとは、pythonでその要素を指定します。
要素の指定は公式のリンクを参照ください。
3つだけ、紹介しておきます。
メソッド | 機能 |
find_element_by_id | idを指定して要素を取得。 |
find_element_by_xpath | xpathを指定して要素を取得。xpathでもfull xpathでも良い。 |
find_element_by_name | nameを指定して要素を取得。 |
それぞれ、メソッド名のままですね。
実際のコードで、idで要素を指定する場合は、次のようになります。
*driverはchrome driverを読み込んだオブジェクトです。
1 |
element = driver.find_element_by_id('idの名前') |
操作の種類
操作の種類は、基本的に人がする操作と同じです。
操作はクリック、入力、選択の3つを紹介します。
メソッド | 機能 |
click() | クリック |
clear() | 入力をクリア |
send_key('文字') | テキスト入力 |
Selectクラスのselect_by_visible_text('選択する文字') | 文字から、select要素の選択 |
Selectクラスのselect_by_index(選択するindex no) | indexから、select要素の選択 |
実際のコードは次のようになります。
id要素を指定して、クリックしています。
1 2 |
element = driver.find_element_by_id('id名') element.click() |
次のように、1行にしてもOKです。
本記事では、1行を採用しています。
1 |
driver.find_element_by_id('id名').click() |
ここまでできたら、あとは、ひたすらウェブの操作を実装します。
ライブラリ読み込み
まずは、必要なseleniumのライブラリを読み込みます。
1 2 3 4 5 |
from selenium import webdriver from selenium.webdriver.support.select import Select from selenium.webdriver.chrome.options import Options import os from time import sleep |
driverの読み込みや、select要素の選択のためのライブラリです。
設定、出品情報
設定と出品情報を定義します。
設定
1 2 3 4 5 |
# 設定 user = '' # ユーザーID password = '' # パスワード url = 'https://login.yahoo.co.jp/config/login?auth_lv=pw&.src=auc&.done=https%3A%2F%2Fauctions.yahoo.co.jp%2Fsell%2Fjp%2Fshow%2Fsubmit?category=0' chrome_path = 'chromedriver.exe' |
user、passwordはyahooのものを入れます。
出品情報
1 2 3 4 5 6 7 8 9 10 11 12 |
# 出品情報 product_img = 'product.jpg' title = 'sample 出品' category = '26395' # idの番号 new_old = '未使用に近い' description = 'この商品はサンプルです。' product_return = True location = '東京都' shipping_charge = '出品者' # 出品者/落札者 shipping_end = 1 # 2日後 = 設定値+1 shipping_time = 1 # 午前1時から午前2時 リストのIndex番号 price = 10000000 |
商品画像や、商品名を定義しています。
Chrome起動と終了
まず、Chromeの起動と終了のコードを用意します。
1 2 3 4 5 6 7 |
# chrome 起動 options = Options() options.add_argument('--incognito') # シークレットモード driver = webdriver.Chrome(os.path.abspath(chrome_path), options=options) sleep(1) driver.get(url) |
chrome driverをoptionを使って、起動して、urlを開きます。
1 2 |
driver.close() driver.quit() |
そして、閉じます。
この2つ間に操作の処理を追加して行きます。
ログイン
ログインをします。
ユーザー名入力
1 2 3 |
sleep(1) driver.find_element_by_id('username').send_keys(user) driver.find_element_by_id('btnNext').click() |
パスワード入力
1 2 3 |
sleep(1) driver.find_element_by_id('passwd').send_keys(password) driver.find_element_by_id('btnSubmit').click() |
一旦動かしてみましょう!
ログインできればOKです。
処理が安定しない場合は、sleepで数秒のウェイトを入れましょう。
ポップアップの削除
ログインすると、ポップアップが出てくるので、これは消します。
これはjavascriptで要素を直接非表示にします。
javascriptの実行はexecute_scriptメソッドを使います。
1 |
driver.execute_script('document.getElementById("js-ListingModal").style.display = "none";') |
そのまま、javascriptのコードを渡せばOKです。
商品画像貼り付け
出品画像を貼り付けます。
ローカルに置いてある、product.pngを2回貼ります。
1 2 3 |
sleep(1) driver.find_element_by_id('selectFile').send_keys(os.path.abspath(product_img)) driver.find_element_by_id('selectFile').send_keys(os.path.abspath(product_img)) |
タイトル
出品タイトルを設定します。
1 |
driver.find_element_by_id('fleaTitleForm').send_keys(title) |
カテゴリ
カテゴリを設定します。
ここはわかりにくいですが、カテゴリごとにあるIDを確認します。
このカテゴリのIDを隠れ要素のname='category'の値に設定します。
1 |
driver.execute_script(f'arguments[0].value = {category}', driver.find_element_by_name('category')) |
execute_scriptメソッドで、要素と要素の操作をjavascriptで渡しています。
その他の、出品カテゴリのIDはデベロッパーツールで確認してください。
商品の状態
商品の状態を設定します。
今回はselect要素なので、Selectクラスを使います。
1 |
Select(driver.find_element_by_name('istatus')).select_by_visible_text(new_old)ここ |
返品
ここもわかりにくいです。
チェックボックスを押すと、labelのclassに「is-check」が追加されたり、消えたりします。
ここでは、labelの要素をクリックします。
labelのXpathは「/html/body/form/div/div[13]/label」
これに、is-checkがあるかどうかで「[not(contains(@class, "is-check"))]」
を足したものが要素となります。
1 2 3 4 |
if not product_return: driver.find_element_by_xpath('/html/body/form/div/div[13]/label[(contains(@class, "is-check"))]').click() else: driver.find_element_by_xpath('/html/body/form/div/div[13]/label[not(contains(@class, "is-check"))]').click() |
ポイント
単純にidを指定しても、動かない時は色々調べながら、動く要素を探します。
商品説明
ここもわかりにくいです。
iFrameがある場合は、一旦そちらに切り替えてから、中の要素を指定します。
driver.switch_to.frameでフレームに切り替えます。
処理が終われば、driver.switch_to.default_contentで戻します。
1 2 3 4 |
iframe = driver.find_element_by_id('rteEditorComposition0') driver.switch_to.frame(iframe) driver.find_element_by_id('0').send_keys(description) driver.switch_to.default_content() |
発送元の地域
発送元の地域を指定
1 |
Select(driver.find_element_by_name("loc_cd")).select_by_visible_text(location) |
配送方法
配送方法の設定はいくつかありますが、ネコポスの設定だけします。
1 |
driver.find_element_by_xpath('/html/body/form/div/div[21]/div/section[1]/div[2]/ul/li[1]/label[not(contains(@class, "is-check"))]').click() |
違う配送方法にしたい場合は、Xpathを調べて、変更してみてください。
発送までの日数
こちらも全部せずに、2-3日のみ実装します。
1 |
driver.find_element_by_xpath('/html/body/form/div/div[22]/div[2]/label[not(contains(@class, "is-check"))]').click() |
こちらも他の日数にするときは、Xpathを調べて、要素に指定してください。
終了日時
終了日時を設定します。
select要素のindex noで設定しています。
日付であれば、0=1日後、1=2日後,,,という感じになります。

1 2 |
Select(driver.find_element_by_id("ClosingYMD")).select_by_index(shipping_end) Select(driver.find_element_by_id("ClosingTime")).select_by_index(shipping_time) |
開始価格
開始価格は一旦テキストをクリアしてから、設定します。
1 2 |
driver.find_element_by_id("auc_StartPrice").clear() driver.find_element_by_id("auc_StartPrice").send_keys(price) |
確認ボタン
最後に、確認ボタンを押します。
1 |
driver.find_element_by_xpath('/html/body/form/div/ul/li/input').click() |
出品ボタン
画面が遷移して、確認画面が出ます。
ここまで出れば、この記事は終了です。
お疲れ様でした。
どうでしょう?ウェブの自動化について紹介しました。
毎日毎日、同じウェブ操作をしていませんか?
そんな作業は自動化してしまって、人生の時間を空けて行きましょう!
他の活用方法は「python 活用 できることまとめ」も参考にしてください。
Pythonスキルが身に付いたら、ぜひスキルを生かして稼いでいきましょう!