야후옥에서 과거에 구입한 상품을 자동으로 PDF에 저장하는 도구 [Python]
6937 단어 파이썬셀레늄chromedriver야후옥
도전
야후옥에서 상품을 구입한 경우, 기본적으로 영수증은 발행되지 않습니다. 그러므로 증명할 것이 없으면 경비로 떨어지지 않을 수 있습니다. 이 해결책은 거래 화면을 캡처하는 방법입니다. 하지만 한 개 한 개를 수작업으로 하는 것은 상당한 고행입니다 😌
이번에는 ChromeDriver를 사용하여 자동화하고 싶습니다.
운영 환경
Mac OS Mojave
파이썬 3.7.6
VSCode
ChromeDriver
처리 흐름
①【야후옥에 자동 로그인】
↓
②【상품별 낙찰의 거래 화면을 연다】
↓
③【PDF로 변환】
↓
④【지정 파일에 저장】
처리 후의 예
소스 코드는 이쪽
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time
import json
import sys
username= "ユーザー名"
password="パスワード"
def main():
#ヤフオクのURL
driver.get('https://login.yahoo.co.jp/config/login?.src=auc&.done=https%3A%2F%2Fauctions.yahoo.co.jp%2F' )
#自動ログイン
driver.find_element_by_id("username").send_keys(username)
driver.find_element_by_id("btnNext").click()
time.sleep(1)
driver.find_element_by_id("passwd").send_keys(password)
driver.find_element_by_id("btnSubmit").click()
#driver.find_element_by_id("").click() *ポップアップ広告が出た時
driver.find_element_by_xpath('//*[@id="yjMain"]/div/div[2]/div[2]/div/div[2]/table/tbody/tr[3]/td[1]/a').click()
time.sleep(1)
#次へのボタンがなくなるまでループ
while True:
try:
if len(driver.find_elements_by_xpath("//img[@src='https://s.yimg.jp/images/auct/template/ui/search/arrow_next.gif']")) > -1:
print("start PDF")
item_list= []
for item in driver.find_elements_by_css_selector('p.decTxt01'):
try:
link = item.find_element_by_tag_name("a").get_attribute("href")
except:
link = "skip"
item_list.append(link)
for link in item_list:
try:
driver.get(link)
time.sleep(2)
driver.find_element_by_class_name('decIcoArw').click()
time.sleep(2)
driver.execute_script('return window.print()')
driver.back()
except :
print("None")
btn = driver.find_element_by_link_text("次の50件").get_attribute("href")
print(btn)
print("next url:{}".format(btn))
driver.get(btn)
print("Next page") #強制的に終了
except:
sys.exit()
#印刷を無理やりPDF保存する設定
chopt=webdriver.ChromeOptions()
appState = {
"recentDestinations": [
{
"id": "Save as PDF",
"origin": "local",
"account":"" #Chrome (78.0.3904.108)は、必要
}
],
"selectedDestinationId": "Save as PDF",
"version": 2
}
prefs = {'printing.print_preview_sticky_settings.appState':
json.dumps(appState)}
chopt.add_experimental_option('prefs', prefs)
chopt.add_argument('--kiosk-printing')
driver = webdriver.Chrome(executable_path='chromedriverのディレクトリ ',options=chopt)
#処理実行
if __name__ == '__main__':
main()
#*注意点
掲示板にて、取引をしている場合のみは、手作業でのPDF保存になります。
먼저 selenium, time, json,sys를 가져옵니다.
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time
import json
import sys
야후옥 로그인 화면에서 자동으로 로그인합니다. 서버에 부하를 가하지 않도록 time.sleep(1)로 1초간만 시간을 두고 있습니다.
def main():
#ヤフオクのURL
driver.get('https://login.yahoo.co.jp/config/login?.src=auc&.done=https%3A%2F%2Fauctions.yahoo.co.jp%2F' )
#自動ログイン
driver.find_element_by_id("username").send_keys(username)
driver.find_element_by_id("btnNext").click()
time.sleep(1)
driver.find_element_by_id("passwd").send_keys(password)
driver.find_element_by_id("btnSubmit").click()
#driver.find_element_by_id("記入").click() *ポップアップ広告が出た時
driver.find_element_by_xpath('//*[@id="yjMain"]/div/div[2]/div[2]/div/div[2]/table/tbody/tr[3]/td[1]/a').click()
time.sleep(1)
다음 페이지가 사라질 때까지 자동으로 페이지 전환을 반복합니다.
#次へのボタンがなくなるまでループ
while True:
try:
if len(driver.find_elements_by_xpath("//img[@src='https://s.yimg.jp/images/auct/template/ui/search/arrow_next.gif']")) > -1:
print("start PDF")
item_list= []
for item in driver.find_elements_by_css_selector('p.decTxt01'):
try:
link = item.find_element_by_tag_name("a").get_attribute("href")
except:
link = "skip"
item_list.append(link)
for link in item_list:
try:
driver.get(link)
time.sleep(2)
driver.find_element_by_class_name('decIcoArw').click()
time.sleep(2)
driver.execute_script('return window.print()')
driver.back()
except :
print("None")
btn = driver.find_element_by_link_text("次の50件").get_attribute("href")
print(btn)
print("next url:{}".format(btn))
driver.get(btn)
print("Next page") #強制的に終了
except:
sys.exit()
ChromeOptions를 사용하면 인쇄를 강제로 중지하여 PDF 저장을 자동으로 할 수 있습니다.
#印刷を無理やりPDF保存する設定
chopt=webdriver.ChromeOptions()
appState = {
"recentDestinations": [
{
"id": "Save as PDF",
"origin": "local",
"account":"" #Chrome (78.0.3904.108)は、必要
}
],
"selectedDestinationId": "Save as PDF",
"version": 2
}
prefs = {'printing.print_preview_sticky_settings.appState':
json.dumps(appState)}
chopt.add_experimental_option('prefs', prefs)
chopt.add_argument('--kiosk-printing')
driver = webdriver.Chrome(executable_path='chromedriverのディレクトリ ',options=chopt)
#処理実行
if __name__ == '__main__':
main()
결론
야후옥의 데이터는 90일로, 갱신되어 가므로, 3개월마다 이 툴을 사용해 가고 싶습니다. Xpath로 요소를 지정하고 있는 개소는, 다음에 사용할 때에 바뀌고 있을지도 모릅니다만… 🤗(2020/5/25 동작 확인이 끝난 상태)
Reference
이 문제에 관하여(야후옥에서 과거에 구입한 상품을 자동으로 PDF에 저장하는 도구 [Python]), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ebay_yuta/items/68f1002dc5c3cc7c2243
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
①【야후옥에 자동 로그인】
↓
②【상품별 낙찰의 거래 화면을 연다】
↓
③【PDF로 변환】
↓
④【지정 파일에 저장】
처리 후의 예
소스 코드는 이쪽
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time
import json
import sys
username= "ユーザー名"
password="パスワード"
def main():
#ヤフオクのURL
driver.get('https://login.yahoo.co.jp/config/login?.src=auc&.done=https%3A%2F%2Fauctions.yahoo.co.jp%2F' )
#自動ログイン
driver.find_element_by_id("username").send_keys(username)
driver.find_element_by_id("btnNext").click()
time.sleep(1)
driver.find_element_by_id("passwd").send_keys(password)
driver.find_element_by_id("btnSubmit").click()
#driver.find_element_by_id("").click() *ポップアップ広告が出た時
driver.find_element_by_xpath('//*[@id="yjMain"]/div/div[2]/div[2]/div/div[2]/table/tbody/tr[3]/td[1]/a').click()
time.sleep(1)
#次へのボタンがなくなるまでループ
while True:
try:
if len(driver.find_elements_by_xpath("//img[@src='https://s.yimg.jp/images/auct/template/ui/search/arrow_next.gif']")) > -1:
print("start PDF")
item_list= []
for item in driver.find_elements_by_css_selector('p.decTxt01'):
try:
link = item.find_element_by_tag_name("a").get_attribute("href")
except:
link = "skip"
item_list.append(link)
for link in item_list:
try:
driver.get(link)
time.sleep(2)
driver.find_element_by_class_name('decIcoArw').click()
time.sleep(2)
driver.execute_script('return window.print()')
driver.back()
except :
print("None")
btn = driver.find_element_by_link_text("次の50件").get_attribute("href")
print(btn)
print("next url:{}".format(btn))
driver.get(btn)
print("Next page") #強制的に終了
except:
sys.exit()
#印刷を無理やりPDF保存する設定
chopt=webdriver.ChromeOptions()
appState = {
"recentDestinations": [
{
"id": "Save as PDF",
"origin": "local",
"account":"" #Chrome (78.0.3904.108)は、必要
}
],
"selectedDestinationId": "Save as PDF",
"version": 2
}
prefs = {'printing.print_preview_sticky_settings.appState':
json.dumps(appState)}
chopt.add_experimental_option('prefs', prefs)
chopt.add_argument('--kiosk-printing')
driver = webdriver.Chrome(executable_path='chromedriverのディレクトリ ',options=chopt)
#処理実行
if __name__ == '__main__':
main()
#*注意点
掲示板にて、取引をしている場合のみは、手作業でのPDF保存になります。
먼저 selenium, time, json,sys를 가져옵니다.
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time
import json
import sys
야후옥 로그인 화면에서 자동으로 로그인합니다. 서버에 부하를 가하지 않도록 time.sleep(1)로 1초간만 시간을 두고 있습니다.
def main():
#ヤフオクのURL
driver.get('https://login.yahoo.co.jp/config/login?.src=auc&.done=https%3A%2F%2Fauctions.yahoo.co.jp%2F' )
#自動ログイン
driver.find_element_by_id("username").send_keys(username)
driver.find_element_by_id("btnNext").click()
time.sleep(1)
driver.find_element_by_id("passwd").send_keys(password)
driver.find_element_by_id("btnSubmit").click()
#driver.find_element_by_id("記入").click() *ポップアップ広告が出た時
driver.find_element_by_xpath('//*[@id="yjMain"]/div/div[2]/div[2]/div/div[2]/table/tbody/tr[3]/td[1]/a').click()
time.sleep(1)
다음 페이지가 사라질 때까지 자동으로 페이지 전환을 반복합니다.
#次へのボタンがなくなるまでループ
while True:
try:
if len(driver.find_elements_by_xpath("//img[@src='https://s.yimg.jp/images/auct/template/ui/search/arrow_next.gif']")) > -1:
print("start PDF")
item_list= []
for item in driver.find_elements_by_css_selector('p.decTxt01'):
try:
link = item.find_element_by_tag_name("a").get_attribute("href")
except:
link = "skip"
item_list.append(link)
for link in item_list:
try:
driver.get(link)
time.sleep(2)
driver.find_element_by_class_name('decIcoArw').click()
time.sleep(2)
driver.execute_script('return window.print()')
driver.back()
except :
print("None")
btn = driver.find_element_by_link_text("次の50件").get_attribute("href")
print(btn)
print("next url:{}".format(btn))
driver.get(btn)
print("Next page") #強制的に終了
except:
sys.exit()
ChromeOptions를 사용하면 인쇄를 강제로 중지하여 PDF 저장을 자동으로 할 수 있습니다.
#印刷を無理やりPDF保存する設定
chopt=webdriver.ChromeOptions()
appState = {
"recentDestinations": [
{
"id": "Save as PDF",
"origin": "local",
"account":"" #Chrome (78.0.3904.108)は、必要
}
],
"selectedDestinationId": "Save as PDF",
"version": 2
}
prefs = {'printing.print_preview_sticky_settings.appState':
json.dumps(appState)}
chopt.add_experimental_option('prefs', prefs)
chopt.add_argument('--kiosk-printing')
driver = webdriver.Chrome(executable_path='chromedriverのディレクトリ ',options=chopt)
#処理実行
if __name__ == '__main__':
main()
결론
야후옥의 데이터는 90일로, 갱신되어 가므로, 3개월마다 이 툴을 사용해 가고 싶습니다. Xpath로 요소를 지정하고 있는 개소는, 다음에 사용할 때에 바뀌고 있을지도 모릅니다만… 🤗(2020/5/25 동작 확인이 끝난 상태)
Reference
이 문제에 관하여(야후옥에서 과거에 구입한 상품을 자동으로 PDF에 저장하는 도구 [Python]), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ebay_yuta/items/68f1002dc5c3cc7c2243
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time
import json
import sys
username= "ユーザー名"
password="パスワード"
def main():
#ヤフオクのURL
driver.get('https://login.yahoo.co.jp/config/login?.src=auc&.done=https%3A%2F%2Fauctions.yahoo.co.jp%2F' )
#自動ログイン
driver.find_element_by_id("username").send_keys(username)
driver.find_element_by_id("btnNext").click()
time.sleep(1)
driver.find_element_by_id("passwd").send_keys(password)
driver.find_element_by_id("btnSubmit").click()
#driver.find_element_by_id("").click() *ポップアップ広告が出た時
driver.find_element_by_xpath('//*[@id="yjMain"]/div/div[2]/div[2]/div/div[2]/table/tbody/tr[3]/td[1]/a').click()
time.sleep(1)
#次へのボタンがなくなるまでループ
while True:
try:
if len(driver.find_elements_by_xpath("//img[@src='https://s.yimg.jp/images/auct/template/ui/search/arrow_next.gif']")) > -1:
print("start PDF")
item_list= []
for item in driver.find_elements_by_css_selector('p.decTxt01'):
try:
link = item.find_element_by_tag_name("a").get_attribute("href")
except:
link = "skip"
item_list.append(link)
for link in item_list:
try:
driver.get(link)
time.sleep(2)
driver.find_element_by_class_name('decIcoArw').click()
time.sleep(2)
driver.execute_script('return window.print()')
driver.back()
except :
print("None")
btn = driver.find_element_by_link_text("次の50件").get_attribute("href")
print(btn)
print("next url:{}".format(btn))
driver.get(btn)
print("Next page") #強制的に終了
except:
sys.exit()
#印刷を無理やりPDF保存する設定
chopt=webdriver.ChromeOptions()
appState = {
"recentDestinations": [
{
"id": "Save as PDF",
"origin": "local",
"account":"" #Chrome (78.0.3904.108)は、必要
}
],
"selectedDestinationId": "Save as PDF",
"version": 2
}
prefs = {'printing.print_preview_sticky_settings.appState':
json.dumps(appState)}
chopt.add_experimental_option('prefs', prefs)
chopt.add_argument('--kiosk-printing')
driver = webdriver.Chrome(executable_path='chromedriverのディレクトリ ',options=chopt)
#処理実行
if __name__ == '__main__':
main()
#*注意点
掲示板にて、取引をしている場合のみは、手作業でのPDF保存になります。
먼저 selenium, time, json,sys를 가져옵니다.
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time
import json
import sys
야후옥 로그인 화면에서 자동으로 로그인합니다. 서버에 부하를 가하지 않도록 time.sleep(1)로 1초간만 시간을 두고 있습니다.
def main():
#ヤフオクのURL
driver.get('https://login.yahoo.co.jp/config/login?.src=auc&.done=https%3A%2F%2Fauctions.yahoo.co.jp%2F' )
#自動ログイン
driver.find_element_by_id("username").send_keys(username)
driver.find_element_by_id("btnNext").click()
time.sleep(1)
driver.find_element_by_id("passwd").send_keys(password)
driver.find_element_by_id("btnSubmit").click()
#driver.find_element_by_id("記入").click() *ポップアップ広告が出た時
driver.find_element_by_xpath('//*[@id="yjMain"]/div/div[2]/div[2]/div/div[2]/table/tbody/tr[3]/td[1]/a').click()
time.sleep(1)
다음 페이지가 사라질 때까지 자동으로 페이지 전환을 반복합니다.
#次へのボタンがなくなるまでループ
while True:
try:
if len(driver.find_elements_by_xpath("//img[@src='https://s.yimg.jp/images/auct/template/ui/search/arrow_next.gif']")) > -1:
print("start PDF")
item_list= []
for item in driver.find_elements_by_css_selector('p.decTxt01'):
try:
link = item.find_element_by_tag_name("a").get_attribute("href")
except:
link = "skip"
item_list.append(link)
for link in item_list:
try:
driver.get(link)
time.sleep(2)
driver.find_element_by_class_name('decIcoArw').click()
time.sleep(2)
driver.execute_script('return window.print()')
driver.back()
except :
print("None")
btn = driver.find_element_by_link_text("次の50件").get_attribute("href")
print(btn)
print("next url:{}".format(btn))
driver.get(btn)
print("Next page") #強制的に終了
except:
sys.exit()
ChromeOptions를 사용하면 인쇄를 강제로 중지하여 PDF 저장을 자동으로 할 수 있습니다.
#印刷を無理やりPDF保存する設定
chopt=webdriver.ChromeOptions()
appState = {
"recentDestinations": [
{
"id": "Save as PDF",
"origin": "local",
"account":"" #Chrome (78.0.3904.108)は、必要
}
],
"selectedDestinationId": "Save as PDF",
"version": 2
}
prefs = {'printing.print_preview_sticky_settings.appState':
json.dumps(appState)}
chopt.add_experimental_option('prefs', prefs)
chopt.add_argument('--kiosk-printing')
driver = webdriver.Chrome(executable_path='chromedriverのディレクトリ ',options=chopt)
#処理実行
if __name__ == '__main__':
main()
결론
야후옥의 데이터는 90일로, 갱신되어 가므로, 3개월마다 이 툴을 사용해 가고 싶습니다. Xpath로 요소를 지정하고 있는 개소는, 다음에 사용할 때에 바뀌고 있을지도 모릅니다만… 🤗(2020/5/25 동작 확인이 끝난 상태)
Reference
이 문제에 관하여(야후옥에서 과거에 구입한 상품을 자동으로 PDF에 저장하는 도구 [Python]), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ebay_yuta/items/68f1002dc5c3cc7c2243
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(야후옥에서 과거에 구입한 상품을 자동으로 PDF에 저장하는 도구 [Python]), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ebay_yuta/items/68f1002dc5c3cc7c2243텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)