🦔
【Python】SeleniumでWebスクレイピングをする
概要
Chromeで検索を自動実行するプログラムを組んだ。検索ワードを渡して、それをGoogle検索するという単純な仕組み。主に、引用記事を参考にしているので、詳しく学びたい方はそちらへ。
準備
chromedriverが必要なので、ターミナルにて、下記コマンドを入力する。
brew install chromedriver --cask
コード
下記に全体コードを記載する。
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
driver = webdriver.Chrome()
#Open Google
driver.get('https://www.google.com/')
time.sleep(2)
#search some word
search_box = driver.find_element("name", "q")
search_box.send_keys('スタビジ')
search_box.submit()
time.sleep(2)
#get the top website URL
g = driver.find_element(By.CLASS_NAME, "g")
r = g.find_element(By.TAG_NAME, "a")
r.click()
time.sleep(2)
#get screenshot
driver.maximize_window()
driver.save_screenshot('スタビジ.png')
#close browser
driver.quit()
注意点
seleniumがバージョンアップして、idやnameの指定方法が変わったっぽい。多くの記事では古い情報となっているので、下記に新しい書き方を記載する。
old API | New API |
---|---|
Text | Text |
Text | Text |
find_element_by_id(‘id’) | find_element(By.ID, ‘id’) |
find_element_by_name(‘name’) | find_element(By.NAME, ‘name’) |
find_element_by_xpath(‘xpath’) | find_element(By.XPATH, ‘xpath’) |
find_element_by_link_text(‘link_text’) | find_element(By.LINK_TEXT, ‘link_text’) |
find_element_by_partial_link_text(‘partial_link_text’) | find_element(By.PARTIAL_LINK_TEXT, ‘partial_link_text’) |
find_element_by_tag_name(‘tag_name’) | find_element(By.TAG_NAME, ‘tag_name’) |
find_element_by_class_name(‘class_name’) | find_element(By.CLASS_NAME, ‘class_name’) |
find_element_by_css_selector(‘css_selector’) | find_element(By.CSS_SELECTOR, ‘css_selector’) |
古い書き方をすると、下記エラーが発生する。
AttributeError: 'WebDriver' object has no attribute 'find_element_by_name'
次に向けて
検索結果1位のサイトにアクセスして、スクリーンショットを撮る方法で詰まっていた。下記で質問したら回答いただけたので、一応記載。
引用
Discussion