pythonでできることの1つが自動化です。
今回はYahooオークションの出品の自動化を紹介していきます。
本記事はこんな方におすすめです。
Yahooオークションの出品を自動化したい
本記事の内容
- seleniumについて
- chromeドライバーのダウンロード
- 必要なライブラリ
- 実装
この記事を読むと、Yahooオークションの自動化ができます!
もちろん、ウェブ操作の自動化がわかります。
こんな感じで、1千万の写真(フリー素材)の出品を自動で処理します。
python embeddable の環境もセットの場合は、次のリンクを参照ください。
seleniumについて
seleniumはウェブ操作を自動化するライブラリです。
pythonだけでなく、java,ruby,C#,java scriptなどにも対応しております。
ウェブ操作を自動化とは
ウェブ操作の自動化とはどういうことでしょうか?
皆さんは、ウェブブラウザのテキストやボタンに対して、入力、押すと操作します。
これをpython(プログラム)で行うことです。
プログラムですることは、ボタンなどの「要素」を指定して、「操作」します。
とても、シンプルです!!
インストール
pythonの環境にpipでインストールしましょう。
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を読み込んだオブジェクトです。
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スキルが身に付いたら、ぜひスキルを生かして稼いでいきましょう!