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

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

新規登録して質問してみよう
ただいま回答率
85.46%
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Python

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

selenium

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

Q&A

解決済

2回答

1831閲覧

スクレイピング にて画面の切り替えができない

kensho-

総合スコア6

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Python

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

selenium

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

0グッド

0クリップ

投稿2020/10/11 07:29

スクレイピングのコードを書いているのですが、web画面遷移でてこずっております

やりたいこと
1.ブラウザを立ち上げる

2.スクレイピングしたいページを開く

3.そのページに個別ページのリンクが集まっているのでfor文にてそれぞれの個別ページを開く

4.個別ページにて、xpathを利用して取得したい情報を取得

といった流れでやっておりますが、3から4へのリンク遷移でつまづいております。
javascriptのコードも一部借りてやろうとしておりまして、そこで構文エラーが起きています。あまり精通してないことから文法のミスなのかと思われますが、調べても中々見つけることができなかったためどなたかお力お貸ししていただけないでしょうか??

## ライブラリインポート等の部分。省略 ## #ここから下が1から2の部分のコードで正常に動いているのが確認できています。 chrome_options=options) from selenium import webdriver import chromedriver_binary driver = webdriver.Chrome() print('aaaa') driver.get('スクレイピング先URL') WebDriverWait(driver,10).until(EC.presence_of_all_elements_located) #ここから上が1から2の部分のコードで正常に動いているのが確認できています。 #問題の部分 for element in driver.find_elements_by_xpath('//div[1]/div[4]/div/ul/li/a'): link = element.get_attribute('href') driver.execute_script('window.open(#{link})') time.sleep(3) driver.switch_to.window(driver.window_handles[1]) for i, element_more in enumerate(driver.find_elements_by_xpath('/div[1]/div[4]/div[2]/div/div/a'),1): link_more = element_more.get_attribute('href') driver.execute_script('window.open(#{link_more});') driver.switch_to.window(driver.window_handles[1]) #ここから下にデータ取得コードが入ります      #ここから上にデータ取得コードが入ります      driver.close() # Switch back to the first tab driver.switch_to.window(driver.window_handles[0]) time.sleep(1) driver.close() # Switch back to the first tab driver.switch_to.window(driver.window_handles[0])

エラー分

raise exception_class(message, screen, stacktrace) selenium.common.exceptions.JavascriptException: Message: javascript error: Invalid or unexpected token (Session info: chrome=86.0.4240.75)

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

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

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

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

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

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

nto

2020/10/11 08:08

chrome_options=options)こちらについては消し忘れという事でしょうか? またswitch_to_windowsがswitch_to.windowsになっています。 まずはこちらを修正の上、正常に動作するか、エラーが生じるかご報告ください。
kensho-

2020/10/11 08:13 編集

気づきませんでした! ありがとうございます! 修正してみます!
guest

回答2

0

Python

1links = [] 2for element in driver.find_elements_by_xpath('//div[1]/div[4]/div/ul/li/a'): 3 link = element.get_attribute('href') 4 links.append(link) 5 6for link1 in links: 7 driver.execute_script(f'window.open("{link1}")') 8 time.sleep(3) 9 driver.switch_to.window(driver.window_handles[1]) 10 11 link_mores = [] 12 for i, element_more in enumerate(driver.find_elements_by_xpath('/div[1]/div[4]/div[2]/div/div/a'),1): 13 link_more = element_more.get_attribute('href') 14 link_mores.append(link_more) 15 16 for link2 in link_mores: 17 driver.get(link2) 18 19 #ここから下にデータ取得コードが入ります 20 21 22 #ここから上にデータ取得コードが入ります 23 24 driver.close() 25 # Switch back to the first tab 26 driver.switch_to.window(driver.window_handles[0]) 27 time.sleep(1) 28 29driver.close() 30driver.quit()

投稿2020/10/11 11:28

Reach

総合スコア733

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

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

0

ベストアンサー

JavaScriptの文法エラーなので、そこだけしか見てませんが、

driver.execute_script('window.open(#{link})')

これはどういう意図なんでしょうかね?変数linkの値を文字列に埋め込みたいなら、
driver.execute_script(f'window.open({link})')
さらに、文字列は引用符で囲まないといけないので、
driver.execute_script(f'window.open("{link}")')
でしょうか。

他同件1件。

投稿2020/10/11 08:36

otn

総合スコア84786

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

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

kensho-

2020/10/11 11:11

ありがとうございます! おかげで解決できました! 業務でrubyを使っていたのでその癖が入っておりました????
otn

2020/10/11 11:13

ここを見たとき、あれ?Rubyだっけ?とプログラム全体を見直しました。 Rubyにしても引用符が必要ですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問