行いたいこと
前回Googleの検索結果を別タブで開いていきました。
今回は別タブで開いた画面内で上から下までのスクリーンショット
を取得したいと思います。
↓実行結果イメージ
コード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
from bs4 import BeautifulSoup import time from selenium import webdriver options = webdriver.ChromeOptions() options.add_argument('--headless') driver = webdriver.Chrome("chromedriver_win32/chromedriver.exe",options=options) # 上位から何件までのサイトを抽出するか指定する pages_num = 3 # キーワード key_word = 'webスクレイピング' # Google検索で「webスクレイピング」の結果を格納する url = 'https://www.google.com/search?num={}&q={}'.format(pages_num,key_word) # SeleniumでURLを起動する driver.get(url) time.sleep(3) # WebサイトのHTMLデータをBeautifulSoupで解析する soup = BeautifulSoup(driver.page_source,'html.parser') # 検索結果のまとまり page_titles = soup.find_all(class_="tF2Cxc") title_detail = [] i = 1 # 1件別でURLを取得する for page_title in page_titles: url = page_title.find("a").get("href").replace('/url?q=','') print("url = " , url) # タブを右隣に新規追加 driver.execute_script("window.open()") # 操作対象のタブを追加したタブに設定 driver.switch_to.window(driver.window_handles[i]) # 検索結果から取得したURLへ遷移させる driver.get(url) page_width = driver.execute_script("return document.body.scrollWidth;") page_height = driver.execute_script("return document.body.scrollHeight;") driver.set_window_size(page_width, page_height) driver.save_screenshot('フルサイズスクショ_' + str(i) + '.png') # タブを右に追加していきたいので数字をプラスする i = i + 1 time.sleep(2) # 開き終わったら一番左のタブへ操作対象を戻す driver.switch_to.window(driver.window_handles[0]) |
解説
ヘッドレスモードでないと上手くキャプチャ取得できないようなので、
まずはヘッドレスモードにします。
1 2 3 |
options = webdriver.ChromeOptions() options.add_argument('--headless') driver = webdriver.Chrome("chromedriver_win32/chromedriver.exe",options=options) |
スクリーンショットを取得するのは以下の部分になります。
・webdriverの画面サイズ:横幅、高さを設定
・save_screenshotでスクショ
・for文で別タブを開いているので、「i」で連番設定
1 2 3 4 |
page_width = driver.execute_script("return document.body.scrollWidth;") page_height = driver.execute_script("return document.body.scrollHeight;") driver.set_window_size(page_width, page_height) driver.save_screenshot('フルサイズスクショ_' + str(i) + '.png') |
今回は以上となります。
最後までお読みいただきありがとうございました!
現在pythonの学習(自動化)では以下の本を読んでおります。
リンク