2020-03-03

要素の持つ値を取得する - selenium - python

ウェブページの要素を取得して、その要素の持つ属性やテキストを取得する。

htmlのタグには、テキストや属性(class=など)が指定されている場合がある。
例えば <a> タグの属性 href=にはクリックしたときに移動するリンク先が、
<img> タグの属性 src= には画像のurlが記載されている。

これらを取得することで効率的にデータを収集できる。


・要素を取得

YAHOOのトップページの「エンタメ」タブの要素を見てみる。

まずは検証でhtmlを確認し、XPathを取得する。


今回はhtmlを右クリックから「Copy ⇒ Copy full XPath」でフルパスを取得。
<a> タグの部分を取得)



・要素のテキストを取得

要素のテキストとは <a>文字</a> のようにタグの間に記載されいる文字のこと。
.text でその要素の持つテキストを取得できる。
from selenium import webdriver

brows = webdriver.Chrome()

brows.get( 'https://www.yahoo.co.jp/' )

element = brows.find_element_by_xpath( '/html/body/div/main/div[2]/article/div/ul/li[3]/a' )

print( element.text )

#出力
# エンタメ


.text は対象の要素の中にあるタグ(子要素)が持つテキスト全てを取得する。
上記のXPathを編集して、2つ上の <ul> タグでテキストを取得してみる。
from selenium import webdriver

brows = webdriver.Chrome()

brows.get( 'https://www.yahoo.co.jp/' )

element = brows.find_element_by_xpath( '/html/body/div/main/div[2]/article/div/ul' )

print( element.text )

#出力
# ニュース
# 経済
# エンタメ
# スポーツ
# 国内
# 国際
# IT・科学
# 地域


「エンタメ」以外のタブの文字が取得できた。


・要素の属性の値を取得

.get_attribute( 属性名 ) でその要素の指定した属性の値を取得する。
from selenium import webdriver
 
brows = webdriver.Chrome()
 
brows.get( 'https://www.yahoo.co.jp/' )
 
element = brows.find_element_by_xpath( '/html/body/div/main/div[2]/article/div/ul/li[3]/a' )
 
print( element.get_attribute( 'class' ) )    #class= で指定されている値

#出力
# rapidnofollow sc-bEjcJn dXIkjh


指定した属性が設定されていない場合は空白やNoneが返ってくる。
from selenium import webdriver
 
brows = webdriver.Chrome()
 
brows.get( 'https://www.yahoo.co.jp/' )
 
element = brows.find_element_by_xpath( '/html/body/div/main/div[2]/article/div/ul/li[3]/a' )
 
print( element.get_attribute('class') )
print( element.get_attribute('id') )    #id= は指定されていない
print( element.get_attribute('href') )

#出力
# rapidnofollow sc-bEjcJn dXIkjh
# 
# https://news.yahoo.co.jp/categories/entertainment


href= の値を指定することで、クリックせずにページを移動することもできる。
from selenium import webdriver
 
brows = webdriver.Chrome()
 
brows.get( 'https://www.yahoo.co.jp/' )
 
element = brows.find_element_by_xpath( '/html/body/div/main/div[2]/article/div/ul/li[3]/a' )
 
strUrl = element.get_attribute( 'href' )

brows.get( strUrl )    #href= の値へ移動


0 件のコメント:

コメントを投稿