質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

Q&A

解決済

3回答

1345閲覧

Python seleniumでfor文while文

pandama

総合スコア7

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

0グッド

0クリップ

投稿2020/01/13 10:59

Python初心者のため、質問が分かりずらいかと思いますが、よろしくお願いします。

実現したいこと

Excel C列からキーワード(name)を抽出しURLに組み込み、開いたページの特定箇所(xpath)の数値を再度Excelに書き出しという作業を繰り返したいです。
ExcelにはC2セルから1000行程度のデータがあるため、上から順に一番下のセルまでこの作業を繰り返したいのですが、単体(C2セルのname)のみExcel書き出しができる状態です。
#質問
①for分やwhile文を試しましたが、構文が正しくなく動作しません。うまく動作させるやり方があればご教示頂きたいです。
②キーワード(name)の数だけURLを開きますが、ログインが必要なページの場合のため、ID/パスワードの入力は一度だけで済むような処理あるのでしょうか。

< 該当のソースコード > from selenium import webdriver from selenium.webdriver.common.alert import Alert import openpyxl wb =openpyxl.load_workbook('**********.xlsx') sheet = wb.get_sheet_by_name('sheet1') # 操作するブラウザを開く driver = driver = webdriver.Chrome(executable_path='C:\Python\chromedriver.exe') # Excel file C2セルからnameを抽出 name = sheet.cell(row=2, column=3).value # URLにnameを反映 driver.get('https://*******' + name + '@******') import time time.sleep(10) # 操作を指定 xpathから特定箇所抽出 xpath = "/html/body/***************" elems = driver.find_elements_by_xpath(xpath) # 抽出したものをExcelに反映する for elem in elems: sheet['P2'].value = elem.text wb.save('**********.xlsx')

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

では、下記のコードを試し下さい

#3. Excel file C2セルからnameを抽出 for i in range(2,1001): name = sheet.cell(row= i, column=3).value   # URLにnameを反映 driver.get('https://**********&#039; + name + '@**********') #4. 操作を指定 xpathから特定箇所抽出 xpath = "/html/body/***************" elems = driver.find_elements_by_xpath(xpath) #5.抽出したものをExcelに反映 sheet.cell(row = i, column = 16,value = elems) wb.save('**********.xlsx')

投稿2020/01/17 15:14

harinezumi.py

総合スコア282

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

elemsのデータを一つセルに保存するのか、それとも P2,Q2..横並びて行きたいのでしょうか

下記のコード実行したら、うまくいく気がします

for key, elem in enumerate(elems): sheet.cell(row = i, column = key + 16,value = elem.text)

投稿2020/01/17 14:26

harinezumi.py

総合スコア282

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pandama

2020/01/17 14:49

ありがとうございます。elemsのデータをP2,P3,P4と縦並びでいきたいです。 先程、記載いただいたコードで試すと一番最後に開いたwebページのxpathのみExcelに反映され、その前(range(2,1000)まで)のxpathは反映されないようです。 #3. Excel file C2セルからnameを抽出 for i in range(2,1001):
pandama

2020/01/19 10:12

何度かこねくり回したところ、こちらのコードで表示されるようになりました。(初回試したとき一部しか反映しなかったのが謎です)ご丁寧に対応いただきまして本当にありがとうございました!
guest

0

こういうことでしょうか、認識齟齬でしたらすみません

for i in range(2, 1001): name = sheet.cell(row=i, column=3).value # URLにnameを反映 driver.get('https://*******' + name + '@******') import time time.sleep(10) # 操作を指定 xpathから特定箇所抽出 xpath = "/html/body/***************" elems = driver.find_elements_by_xpath(xpath) # 抽出したものをExcelに反映する for elem in elems: sheet['P2'].value = elem.text //多分ここもループする箇所です wb.save('**********.xlsx')

投稿2020/01/13 11:17

harinezumi.py

総合スコア282

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pandama

2020/01/17 10:17

ありがとうございます! for文の箇所はうまく動作するようになりました。 sheet['P2'].value = elem.text //多分ここもループする箇所です →この箇所はさらにfor文を入れたり他の方法も調べたのですが、うまくいきません。 for文以外で処理が必要なところなのでしょうか。お手数ですが、ご存じでしたらご教授いただくことはできますでしょうか。
harinezumi.py

2020/01/17 12:23

現状はどうなっていますでしょうか 多分下記のコードで動きます # 抽出したものをExcelに反映する for key, elem in enumerate(elems): sheet.cell(row=2, column=key+16.value = elem.text
pandama

2020/01/17 14:14

現状のコードは以下です。追記いただいたものを組み込んだところ動作できました。 ただ、Excel fileを確認するとP2セルのみxpathから抽出した数値が反映されており、P3セルより下は何も入力されていませんでした。 #3でname毎にwebページが切り替わっていることは確認できましたが、webページ毎にxpathを抽出してExcel fileに反映させるには#3または#5でさらに繰り返し処理が必要なのでしょうか。 from selenium import webdriver from selenium.webdriver.chrome.options import Options import time import openpyxl wb = openpyxl.load_workbook('**********.xlsx') sheet = wb.get_sheet_by_name('sheet1') # 1.操作するブラウザを開く driver = driver = webdriver.Chrome(executable_path='C:\Python\chromedriver.exe') # 2.操作するページ(home)を開く driver.get('https://********************') time.sleep(3) #3. Excel file C2セルからnameを抽出 for i in range(2,1001): name = sheet.cell(row= i, column=3).value   # URLにnameを反映 driver.get('https://**********' + name + '@**********') #4. 操作を指定 xpathから特定箇所抽出 xpath = "/html/body/***************" elems = driver.find_elements_by_xpath(xpath) #5.抽出したものをExcelに反映 for key, elem in enumerate(elems): sheet.cell(row = 2, column = key + 16,value = elem.text) wb.save('**********.xlsx')
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問