前提・実現したいこと
PythonへSeleniumを導入?し資産ツールサイトへ自動ログインした後、
複数ページにまたがった資産情報(テーブル形式)をひとつのCSVファイルへ出力しようと思っています。
(資産ツールに標準の出力機能が無いため)
ひとつのページのみではうまくCSVファイルが出力できますが、
ページを遷移して同じような処理を行おうとすると上書きされてうまくいきません。
リンクが全て紫になるくらい調べましたが分からないのでどうか、教えてください。
発生している問題・エラーメッセージ
今のところエラーは発生しておりません。
強いて言うならUSBデバイスが認識されませんというようなエラーがでますが
処理は問題なく進んでおり、調べたところ無視してもいいエラーのようでした。
該当のソースコード
python
1from time import sleep 2from bs4 import BeautifulSoup 3from selenium import webdriver 4from selenium.webdriver.chrome.options import Options 5from selenium.webdriver.common.keys import Keys 6import os 7import csv 8import datetime 9 10~~~~~~~~~~~~~~~~~~~~~~~~~~ 11サイトへのアクセス、自動ログインの省略 12~~~~~~~~~~~~~~~~~~~~~~~~~~ 13 14#デバイスのURLを開き画面表示を待つ 15driver.get(device_url_1) 16sleep(1) 17 18 19#名前でソート 20driver.find_element_by_xpath('//*[@id="devices_table"]/thead/tr/th[2]').click() 21sleep(1) 22 23# 資産一覧テーブル取得 24html = driver.page_source 25soup = BeautifulSoup(html, "html.parser") 26table = soup.find(id="devices_table") 27tr_list = table.find_all("tr") 28 29# CSV出力用データ1 30data = [] 31 32for i, tr in enumerate(tr_list): 33 row_data = [] 34 35 if i == 0: 36 # ヘッダー行の処理 37 row_data.extend(["名前", "グループ", "OSタイプ", "プラットフォームタイプ", "OSバージョン", "シリアル番号", "IPアドレス", "最終チェックイン"]) 38 data.append(row_data) 39 continue 40 41 # td要素取得 42 td_list = tr.find_all("td") 43 44 # 名前 45 row_data.append(td_list[1].text.strip()) 46 # グループ 47 row_data.append(td_list[9].text.strip()) 48 # OSタイプ 49 row_data.append(td_list[3].text.strip()) 50 # プラットフォームタイプ 51 row_data.append(td_list[4].text.strip()) 52 # OSバージョン 53 row_data.append(td_list[5].text.strip()) 54 # シリアル番号 55 row_data.append(td_list[6].text.strip()) 56 # IPアドレス 57 row_data.append(td_list[7].text.strip()) 58 # 最終チェックイン 59 row_data.append(td_list[10].text.strip()) 60 61#2ページ目 62driver.get(device_url_2) 63sleep(1) 64 65# 資産一覧テーブル取得 66html = driver.page_source 67soup = BeautifulSoup(html, "html.parser") 68table = soup.find(id="devices_table") 69tr_list = table.find_all("tr") 70 71 # td要素取得 72 td_list = tr.find_all("td") 73 74 # 名前 75 row_data.append(td_list[1].text.strip()) 76 # グループ 77 row_data.append(td_list[9].text.strip()) 78 # OSタイプ 79 row_data.append(td_list[3].text.strip()) 80 # プラットフォームタイプ 81 row_data.append(td_list[4].text.strip()) 82 # OSバージョン 83 row_data.append(td_list[5].text.strip()) 84 # シリアル番号 85 row_data.append(td_list[6].text.strip()) 86 # IPアドレス 87 row_data.append(td_list[7].text.strip()) 88 # 最終チェックイン 89 row_data.append(td_list[10].text.strip()) 90 91 92 93 94 #最終的な書き出し 95 data.append(row_data) 96 97 98 99# ダウンロード先&ファイル名 100csv_date = datetime.datetime.today().strftime("%Y%m%d") 101csv_file_name = "ThinClient_Device" + csv_date + ".csv" 102 103if os.path.exists(csv_file_name): 104 # ファイルが存在する時は削除 105 os.remove(csv_file_name) 106 107# CSVファイルに書き出し 108with open(csv_file_name, 'a') as file: 109 w = csv.writer(file, lineterminator='\n') 110 w.writerows(data) 111 file.close() 112
試したこと
調べても同じような記事が無いため、ページ遷移と同じような処理を行おうとしました。
本当に初心者過ぎて分からないことが分からないといった感じです…。すみません…。
ページ遷移の仕方ももう少しありそうです。
https://~~~/devices#page/1
https://~~~/devices#page/2
https://~~~/devices#page/3
・・・というページ構成です。
device_url = "https://~~~/devices#page/1 + 1"
という風に入力すれば出来ると思ったのですができませんでした。
記述の方法がもっとありそうです…。
こんな説明で分かりづらいと思いますがどうか教えてください…。
補足情報(FW/ツールのバージョンなど)
Windows10
Python 3.9
Google Chrome 92.0.4515.159
webdriver Ver.92
回答1件
あなたの回答
tips
プレビュー