Python Python 活用 プログラミング

【python できること】seleniumを使って自動化!Yahooオークション自動出品する方法!

yahoo auction auto

 

pythonでできることの1つが自動化です。

今回はYahooオークションの出品の自動化を紹介していきます。

 

本記事はこんな方におすすめです。

hituji
pythonのウェブ操作自動化を参考にしたい

Yahooオークションの出品を自動化したい

 

本記事の内容

  • seleniumについて
  • chromeドライバーのダウンロード
  • 必要なライブラリ
  • 実装

 

この記事を読むと、Yahooオークションの自動化ができます!

もちろん、ウェブ操作の自動化がわかります。

こんな感じで、1千万の写真(フリー素材)の出品を自動で処理します。

 

サンプルコード

 

python embeddable の環境もセットの場合は、次のリンクを参照ください。

>> python embeddable含むコード

 

スポンサーリンク

seleniumについて

seleniumはウェブ操作を自動化するライブラリです。

>> selenium公式

 

pythonだけでなく、java,ruby,C#,java scriptなどにも対応しております。

 

ウェブ操作を自動化とは

ウェブ操作の自動化とはどういうことでしょうか?

皆さんは、ウェブブラウザのテキストボタンに対して、入力押すと操作します。

これをpython(プログラム)で行うことです。

 

yahoo auction 1

 

プログラムですることは、ボタンなどの「要素」を指定して、「操作」します。

とても、シンプルです!!

 

インストール

pythonの環境にpipでインストールしましょう。

pip install selenium

 

 

chrome driver

今回操作するブラウザはGoogle Chromeを使います。

インストールがまだな方は、インストールしてください。

>> Google Chrome ダウンロード

 

Chromeのバージョン確認

Chromeのバージョンを確認します。

次のchrome driverのダウンロードで必要になります。

Chromeを起動したら、右上のチョボ3つを押して、設定を開きます。

 

Chromeについてから、バージョンを確認しましょう。

 

次は、chrome driverです。先程のとは別です。

pythonのプログラムで読み込むものです。

ダウンロード

下記リンクよりchrome driverをダウンロードしてください。

>> chrome driverダウンロードサイト

現状のChromeのバージョンに対応したものを選択してください。

yahoo auction 4

 

OSにあったものをダウンロードしてください。

yahoo auction 5

 

実装方法

では、早速実装して行きましょう。

 

準備

サンプルコードのように、コードファイルや商品画像、Chrome driverを配置します。

>> サンプルコード

 

 

コードのファイルはダウンロードすれば、中にコードが書いてあります。

空のファイルを用意して、記事読みながら、コード書いてもらってもOKです。

 

要素の取得

要素がわからないと、プログラムが書けないので、まず要素の取得方法から紹介します。

ブラウザを開いたら、チョボ三つ>その他ツール>デベロッパーツールを選びます。

yahoo auction 8

 

右に開発用の画面が出てきます。

エレメント選択ボタンを押したあと、操作したい要素をクリックします。

すると開発画面の文字がハイライトされます。

これが、テキストやボタンの要素のコードです。

ここのid = ""、name=""、class=""などを参考にします。

yahoo auction 9

 

xpathというもので、要素を指定することもあります。

その場合は、ハイライトした要素を右クリックして、CopyからXpath、full Xpathを選びます。

yahoo auction 10

 

注意ポイント

要素は自分で探せるようにしておいてください。

ウェブでは、アプリケーション更新とかで、要素名が変わることがあります。

 

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を読み込んだオブジェクトです。

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要素を指定して、クリックしています。

element = driver.find_element_by_id('id名')
element.click()

 

次のように、1行にしてもOKです。

本記事では、1行を採用しています。

driver.find_element_by_id('id名').click()

 

ここまでできたら、あとは、ひたすらウェブの操作を実装します。

ライブラリ読み込み

まずは、必要なseleniumのライブラリを読み込みます。

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要素の選択のためのライブラリです。

 

設定、出品情報

設定と出品情報を定義します。

設定

# 設定
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のものを入れます。

 

出品情報

# 出品情報
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の起動と終了のコードを用意します。

# 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を開きます。

 

driver.close()
driver.quit()

そして、閉じます。

 

この2つ間に操作の処理を追加して行きます。

 

ログイン

ログインをします。

ユーザー名入力

sleep(1)
driver.find_element_by_id('username').send_keys(user)
driver.find_element_by_id('btnNext').click()

 

パスワード入力

sleep(1)
driver.find_element_by_id('passwd').send_keys(password)
driver.find_element_by_id('btnSubmit').click()

 

一旦動かしてみましょう!

ログインできればOKです。

 

処理が安定しない場合は、sleepで数秒のウェイトを入れましょう。

 

ポップアップの削除

ログインすると、ポップアップが出てくるので、これは消します。

これはjavascriptで要素を直接非表示にします。

javascriptの実行はexecute_scriptメソッドを使います。

driver.execute_script('document.getElementById("js-ListingModal").style.display = "none";')

 

そのまま、javascriptのコードを渡せばOKです。

 

商品画像貼り付け

出品画像を貼り付けます。

ローカルに置いてある、product.pngを2回貼ります。

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))

 

タイトル

出品タイトルを設定します。

driver.find_element_by_id('fleaTitleForm').send_keys(title)

 

カテゴリ

カテゴリを設定します。

ここはわかりにくいですが、カテゴリごとにあるIDを確認します。

 

このカテゴリのIDを隠れ要素のname='category'の値に設定します。

driver.execute_script(f'arguments[0].value = {category}', driver.find_element_by_name('category'))

 

execute_scriptメソッドで、要素と要素の操作をjavascriptで渡しています。

その他の、出品カテゴリのIDはデベロッパーツールで確認してください。

 

商品の状態

商品の状態を設定します。

今回はselect要素なので、Selectクラスを使います。

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"))]

を足したものが要素となります。

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で戻します。

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()

 

発送元の地域

発送元の地域を指定

Select(driver.find_element_by_name("loc_cd")).select_by_visible_text(location)

 

配送方法

配送方法の設定はいくつかありますが、ネコポスの設定だけします。

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日のみ実装します。

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日後,,,という感じになります。

Select(driver.find_element_by_id("ClosingYMD")).select_by_index(shipping_end)
Select(driver.find_element_by_id("ClosingTime")).select_by_index(shipping_time)

 

開始価格

開始価格は一旦テキストをクリアしてから、設定します。

driver.find_element_by_id("auc_StartPrice").clear()
driver.find_element_by_id("auc_StartPrice").send_keys(price)

 

確認ボタン

最後に、確認ボタンを押します。

driver.find_element_by_xpath('/html/body/form/div/ul/li/input').click()

 

出品ボタン

画面が遷移して、確認画面が出ます。

ここまで出れば、この記事は終了です。

お疲れ様でした。

 

どうでしょう?ウェブの自動化について紹介しました。

毎日毎日、同じウェブ操作をしていませんか?

そんな作業は自動化してしまって、人生の時間を空けて行きましょう!

 

他の活用方法は「python 活用 できることまとめ」も参考にしてください。

>> python 活用 できることまとめ

Pythonスキルが身に付いたら、ぜひスキルを生かして稼いでいきましょう!

>> Pythonでの副業の始め方紹介【隙間時間 で可能】

-Python, Python 活用, プログラミング