絞り込み条件を変更する
検索条件を絞り込む

すべてのカテゴリ

29 件中 1 - 29 件表示
カバー画像

【Selenium】Instagramスクレイピング-ノウハウ

数ある記事の中からご覧頂きありがとうございます!今回は私が趣味でスクレイピングしていた「Instagram」でつまずいたところを皆さんに共有しようと思います。≪実行環境≫・Windows10 pro・Python3.6.3・Pycharm2020-3・Chrome driver 最新バージョン・Google Chormeブラウザー・Chromedriver オプションでモバイルモードにしています1.Instagramにログインする際の注意事項まずInstagramをスクレイピングする際にはinstagramにログインする必要があります。その際下記のような弊害が出てきます。>>高速な処理を心がけていると入力できないとエラーが出たこれは初学者が陥りやすく、単純ですが原因解明に時間がかかることもあ      ります。今までスクレイピングの経験がある方は分かるかと思いますが、      高速な処理でログインを行うとブラウザが入力処理を行う前や行ってい    る途中に「ログインボタン」が押されてしまい次の処理に移れないことがあります。〔対策〕入力やクリック処理の前には必ず「time.sleep(1)」と入れるとこういったバグはなくなります。これは1秒間待機するという意味です。よく使うので必ず覚えておきましょう。〔例〕※あくまで例文なのでインスタグラムで使用はできません。import timefrom selenium import webdriver~省略~driver.find_element_by_id("username").send_keys(”ログインID”)tim
0
カバー画像

【Excel/VBA/Selenium】Webページに指定要素が存在するかチェックする

みなさんこんにちは。イプシロンです。ECサイトなど商品の在庫状況によって、サイト内の指定要素が変更される場合があります。そのようなサイトに遭遇した際、スクレイピングする際に、webページに指定要素が存在するかをチェックすなければエラーになりますので、本日はその対処法について書いていきます。結論指定要素が存在するかどうかを判断して、分岐処理をすれば問題ありませんWebページに指定要素が存在するかチェックするサンプルコード=================================Public Sub 指定要素の存在チェック()     Dim driver As New Selenium.WebDriver     Dim myBy As New By     Dim sURL As String  sURL = "スクレイピングしたいサイトのURLを入力"         driver.Start "chrome"     driver.Get sURL         '■要素が存在していればTrue/存在しなければFalse     Debug.Print driver.IsElementPresent(myBy.ID("対象要素のIDを入力"))     '■要素が存在してれば処理を行う     If driver.IsElementPresent(myBy.ID("対象要素のIDを入力")) Then         '存在していた場合の処理     Else         '存在していない場合の処理     End If         '■上記は
0
カバー画像

webスクレイピングについて②

seleniumでウェブサイトの情報を取得する際に、ネット環境が不安定であったり、ウェブサイトの情報が大きいと、サイトが表示されるまで時間がかかってしまいます。表示するだけならいいのですが、ウェブサイトを操作したりする場合には、スクレイピングが中断してしまいます。過去のブログでtime.sleep(x)を利用して、コードの進行を意図的に止める方法をお伝えしましたが、止める時間を具体的に指定できる一方で、あらゆるウェブサイトの表示時間をあらかじめ予測することは難しいと思います。そこで、ウェブサイトがすべて表示されたら、次のコードに進むようにしてしまえば、具体的に秒数を指定する必要もなくなります。また、あまりにも表示に時間がかかる場合も考えられますので、待機時間を最大30秒にも指定してみます。具体的には、①必要なモジュールのインストールpip install selenium#seleniumをインストールします。②必要なモジュールをインポートfrom selenium import webdriver#ドライバーのインポートfrom selenium.webdriver.support import expected_conditions as EC#読み込むまで待機する機能のための、インポート。from selenium.webdriver.support.ui import WebDriverWait#最大の読み込み時間を設定するためのインポート③コード内容driver = webdriver.Chrome()  wait = WebDriverWait(driver=dri
0
カバー画像

【selenium】xPathってどうやって取るねん。

みなさんこんにちは。イプシロンです。今回はスクレイピングで必須となるサイト内のxPathの取得方法について書きます。ではいってみましょう。準備ブラウザはChromeを使用し、ココナラのサイトを例にとってご説明します。https://coconala.com/手順1.ココナラのサイトを表示する2.今回は、「ビジネス購入の方はこちら」の文字をスクレイピングします。3.「Shift」+「Ctrl」+「C」を押します。右側にソースコードが表示されます。4.マウスを対象の箇所(ビジネス購入の方はこちら)まで移動します。右側のソースコード上にブルーでハイライトされます。5.ハイライトされた箇所を右クリックします。6.「Copy」→「Copy xPath」を選択します。クリップボードにxPathがコピーされました。7.貼り付けると以下のようになります//*[@id="__layout"]/div/div[1]/div[2]/header/div[1]/div[3]/nav/ul/li[2]/aこれが、対象箇所のxPathになります。8.ソースコードに貼り付けるVBAのソースコードにxPathを以下のように貼り付けます。(今回はメッセージボックスに表示するようにしてみました。)MsgBox Driver.FindElementByXPath("//*[@id=""__layout""]/div/div[1]/div[2]/header/div[1]/div[3]/nav/ul/li[2]/a").Attribute("innerText")9.こんな感じになりました。う~ん。。。。かんたん!!
0
カバー画像

検索システムをSeleniumでテストする

はじめにDataMarina(データマリーナ)というのは、自社開発したウェブ検索システムです。サーバー上にDBシステムがなくても、1行=1レコードスタイルのデータ(表計算データやシンプルなDBデータ)のウェブ検索システムを実現できるという点が特長です。また、ToolBox(ツールボックス)はそれを簡単に扱えるようにしたパッケージです。Selenium今回はSelenium(セレニウム)というウェブ自動化ツール・ブラウザオートメーションツールを使って、検索システムのテストをする様子をご覧いただければと思います。Seleniumというのは、人間が文字を入力して、クリックする、といった動作をコンピュータで自動化するためのツールです。Seleniumを操作するためにPythonを使ってプログラムしています。テスト方法この検索システムは、例えば1000レコードのデータを、ある列をキーとして検索するというものです、つまり、テストするとすれば、実際にその列のデータを入力してみて、表示されたものが元のレコードと同じかどうかを検証する必要があります。1つ2つならばテストは簡単ですが、100、1000、10000…ともなると自動化しないとやっていられません。そこで、Seleniumという自動化ツールが登場します。テスト方法は、次の通りです。(1)データ1000レコード、およびデータ100万レコードの架空の検索システムを準備します。両者とも架空の家電情報データで、1000レコードの方はテスト用に準備したもの、100万レコードの方はquiltstyle.netに実際に置いてあるシステムです。両者とも同
0
カバー画像

【Excel/VBA/Selenium】chromeが突如起動しなくなったときの対処メモ

みなさんこんにちは。イプシロンです。久しぶりにSeleniumでChromeを立ち上げると、突如エラーになり動かなくなる現象が発生します。久しぶり故にドキっとするので、本日は「chromeが突如起動しなくなる時の対処法」について書きます。症状今まで問題なく使用できていたのに、突如以下のようなエラーが飛び出してきました。「環境変数の値がどっかで変わった?」「そもそも何か設定するんだっけ?」「コードいじる必要あるの?」など、独り言が増え出す可能性大。。。結論(対処法)ChromeDriverを最新のにすれば良い。う~ん。。。かんたん!!!以下、解決までの手順です。手順1.右上の三点→「ヘルプ」→「Goole chromeについて」をクリックして、 Chromeブラウザのバージョンを確認します。2.バージョンを確認します。今回ですと、ver:103.0.5060.134ですね。3.以下のサイトから、該当するバージョンのchrome driverをダウンロードします。4.解凍ソフトで解凍して、chromedriver.exeを入手します。5.Windowsの「ファイル名を指定して実行」を表示させて(ショートカット:Winキー + 「R」キー)、 次の文字列を入力して、SeleniumBasicのインストール先のフォルダを表示します。C:\Users\(ユーザーネーム)\AppData\Local\SeleniumBasic6.先程入手した「chromedriver.exe」を上書きします。(オリジナルのchromedriver.exeはリネームしておくといいかも)。7.解決です。最後に
0
カバー画像

【VBA/selenium】seleniumをchrome拡張機能付きで起動する

みなさんこんにちは。 今回は、seleniumをchrome拡張機能付きで起動する方法について 手順を解説していきたいと思います。この記事がおすすめの人この記事は以下の人に特におすすめです。 ・GoogleChromeの拡張機能について調べている人  ・seleniumでWebスクレイピングツールを開発している人  ・Webスクレイピング:中級者~上級者  ・VBAプログラミング:中級者~上級者はじめにChromeユーザーなら拡張機能の一つや二つご利用中かと思います。 ところがWebスクレイピングを実施する際、 seleniumでブラウザを起動すると拡張機能が無い状態で起動します。 GoogleChromeの設定が必要になりますが、 おおよそ10分程度で完了します。手順今回はGoogle翻訳の拡張機能を追加する方法を例として解説します。 まずは、Google翻訳の拡張機能をGoogleChromeに追加してください。 ※Google翻訳の拡張機能を追加する方法については割愛します。全体の大きな流れまずはじめに全体の大きな流れとしては以下のようになります。  1.GoogleChromeの拡張機能を開く  2.デベロッパーモードにする  3.IDを確認する  4.Google拡張機能のファイル場所を確認する  5.拡張機能をパッケージ化する  6.crxファイルが生成される  7.VBAのコードでcrxファイルを指定する 以下に手順の詳細について解説します。1.GoogleChromeの拡張機能を開く1.GoogleChromeを起動します。 2.右上の三点リーダー ⇒ 拡張機能
0
カバー画像

Instagram投稿の「いいね!」を測る方法

仕様が変更され、Instagramの投稿から「いいね」数が直接見えなくなりました。 InstagramAPIから取得すれば取得できるのですが、不慣れな方、環境的に使えない方などもいます。 その中で、「いいね数」を数える方法を開発しましたのでご参考いただければと思います。 なお、これに関わるpython+seleniumでのプログラムを販売していますのでお問い合わせください。 いいね数を取得するにはユーザー数を数える 「○○○、その他が「いいね!」しました」と表示されます。 その他の部分をクリックすると、モーダルウィンドウが開きいいねしてくれたユーザー一覧を確認することが出来ます。 このユーザー数を数えれば良いのですが、1ユーザーずつ数えるのは馬鹿らしいですね。 そのため、ディベロッパーツールを利用してユーザー数をカウントします。 ユーザー数を数えるのには、ディベロッパーツールから要素の高さを取得する 1ユーザーあたりの要素の高さは60pxです。個別ユーザーの親要素の高さを取得して60で割ると「いいね数」が割り出せます。 注意点として、ユーザーを表示したモーダルウィンドウは最後までスクロールしてユーザーを読み込んでおく必要があります。 Instagram側の負荷軽減の措置のため、必要分しかユーザー情報を読み込みません。 この場合、高さが1140なのでいいね数は「19」ということが分かります。 実装 1.その他をクリックしていいねしてくれたユーザーウィンドウを開く2.ユーザー一覧のモーダルウィンドウを最後までスクロールして読み込む (重要)3.ユーザー要素の親要素の高さを知るその他
0
カバー画像

クッキー

Get クッキーdriver.get_cookie(クッキー名) クッキーのリストdriver.get_cookies() Set for cookie in クッキーのリスト:     driver.add_cookie(cookie)※ driver がクッキーのサイトと同一ドメインにいないとエラーになる クッキーname と value をもつ辞書name の値はascii文字列にしないと driver.get_cookie(クッキー名) で取得できないのでascii文字列にすること削除 driver.delete_cookie(クッキー名) 全削除driver.delete_all_cookies()値クッキー.get(キー)for キー, 値 in クッキー.items():
0
カバー画像

Firefox

起動Snapfrom selenium import webdriverfrom selenium.webdriver.firefox.service import Serviceサービス = Service(executable_path="/snap/bin/geckodriver")with webdriver.Firefox(service=サービス) as ドライバ:オプション Getfrom selenium import webdriverオプション = webdriver.FirefoxOptions() Setfrom selenium import webdriverwith webdriver.Firefox(options=オプション) as ドライバ:ブラウザを表示しないオプション.add_argument("-headless")ページ読み込みの待機DOMツリーが完成オプション.page_load_strategy = "eager"待機しないオプション.page_load_strategy = "none"プロファイル 作成空のプロファイルfrom selenium import webdriverプロファイル = webdriver.FirefoxProfile() Setオプション.profile = プロファイル 項目の設定プロファイル.set_preference("項目", 値)
0
カバー画像

Select

Importfrom selenium.webdriver.support.ui import Select 生成 select = Select(selectタグ) 選択  value属性 select.select_by_value("値")  テキスト select.select_by_visible_text("テキスト")  インデックス select.select_by_index(i) 0~ 選択解除 ※ 複数選択可能な<select>に対してのみ有効 すべて select.deselect_all()  value属性 select.deselect_by_value("値")  テキスト select.deselect_by_visible_text("テキスト")  インデックス select.deselect_by_index(i) 項目のリスト すべてselect.options 選択した項目select.all_selected_optionsチェック 選択されている 項目.is_selected() 複数選択可能select.is_multipleロケータ  プルダウン(By.Name, "名前") 項目(By.CSS_SELECTOR, "select[name='名前'] option[value='値']")
0
カバー画像

チェックボックス

選択チェックボックス.click() チェック 選択されているチェックボックス.is_selected()ロケータ(By.Name, "名前")
0
カバー画像

設定

Import from selenium.webdriver.edge.options import Options from selenium.webdriver.edge.service import Serviceプロキシedge_options = Options() edge_options.use_chromium = Trueedge_options.add_argument("--proxy-server=プロキシサーバー")シークレットモードedge_options = Options() edge_options.add_argument("--inprivate")拡張機能を追加  フォルダを指定拡張機能のパス = "拡張機能のフォルダ/バージョン" edge_options = Options()edge_options.add_argument(f"--load-extension={拡張機能のパス}")実行ファイルを指定EDGEドライバのパス = "msedgedriver.exeのパス" edge_service = Service(executable_path=EDGEドライバのパス) ダウンロードフォルダの指定 ダウンロードフォルダのパス = "ダウンロードフォルダの絶対パス" edge_options = Options()edge_options.add_experimental_option(    "prefs",    {        "download.default_directory": ダウンロードフォルダのパス,   
0
カバー画像

スクリーンショット

要素 PNGファイル 要素.screenshot("ファイル名.png") PNGバイナリ要素.screenshot_as_png ページ PNGファイルdriver.save_screenshot("ファイル名.png") バイナリdriver.get_screenshot_as_png()
0
カバー画像

アクション

Import from selenium.webdriver import ActionChains オブジェクト作成 actions = ActionChains(driver) マウス クリック   ダブルクリック actions.double_click(element).perform()   右クリックactions.context_click(element).perform()  移動actions.move_to_element(element).perform()  ドラッグ&ドロップactions.drag_and_drop(src_element, dst_element).perform()
0
カバー画像

フレーム

移動 子フレーム  待機 + 移動wait.until(EC.frame_to_be_available_and_switch_to_it(ロケータ))   移動driver.switch_to.frame(フレーム要素) driver.switch_to.frame("フレーム名")driver.switch_to.frame(インデックス)  最上位フレームdriver.switch_to.default_content() 親フレーム driver.switch_to.parent_frame()タイトル<iframe>などのフレーム内のタイトルはタグから直接取得する必要があるtitleタグ.get_attribute("textContent") ※タグ.text は非表示のタグの場合、空文字列になる
0
カバー画像

ウィンドウ

フォーカスdriver.switch_to.window("ウィンドウ")取得 現在のウィンドウdriver.current_window_handle すべてdriver.window_handles 最後に開いたウィンドウdriver.window_handles[-1]  複数同時に開いた場合[w for w in driver.window_handles if w not in 全ウィンドウ][0]
0
カバー画像

カスタム待機条件

関数 引数なしWebDriverWait(driver, 最大待機秒).until(    lambda ドライバ: 条件)lamda内のd.find_element()は失敗してもエラーにならず 引数ありdef 関数(引数1, ...):     return lambda ドライバ: 条件WebDriverWait(driver, 最大待機秒).until(関数(引数1, ...))クラスclass クラス:     def __init__(self, 引数1, ...):        self.引数1 = 引数1        ...    def __call__(self, ドライバ):        return 条件WebDriverWait(driver, 最大待機秒).until(クラス(引数1, ...))
0
カバー画像

ラジオボタン

選択ラジオボタン.click()チェック  選択されている ラジオボタン.is_selected()ロケータ(By.CSS_SELECTOR, "input[name='名前'][value='値']")
0
カバー画像

待機

Importfrom selenium.common.exceptions import TimeoutException from selenium.webdriver.common.by import Byfrom selenium.webdriver.support import expected_conditions as ECfrom selenium.webdriver.support.wait import WebDriverWaitWAIT_SECONDS = 10POLLING_FREQUENCY_SECONDS = 1作成wait = WebDriverWait(driver, WAIT_SECONDS) wait = WebDriverWait(driver, WAIT_SECONDS, poll_frequency=POLLING_FREQUENCY_SECONDS)待機時間 ページ読み込みの最大待機時間driver.set_page_load_timeout(秒) 要素取得時の最大待機時間driver.implicitly_wait(MAX_WAIT_SECONDS)driver.find_element(), driver.find_elements()用 待機条件判定を行う間隔の指定WebDriverWait(driver, WAIT_SECONDS, poll_frequency=秒)待機条件 存在する wait.until(EC.presence_of_element_located(ロケータ)) wait.until(EC.presence_
0
カバー画像

キーボード

Importfrom selenium.webdriver.common.keys import Keys入力elem.send_keys(文字列)クリアelem.clear()特殊文字 EnterKeys.ENTER Keys.RETURN Back SpaceKeys.BACK_SPACE  DeleteKeys.DELETE 矢印Keys.DOWN Keys.UPKeys.LEFTKeys.RIGHT
0
カバー画像

ダウンロード

Importimport requests from requests.exceptions import RequestExceptionダウンロード シンプルresponse = requests.get(URL) if response.status_code == 200:    with open(パス, 'wb') as fw:        for chunk in response.iter_content(chunk_size=100000):            fw.write(chunk)    print(f'{URL} のダウンロードが成功しました')else:    print(f'{URL} のダウンロードに失敗しました (ステータスコード: {response.status_code})') 例外処理try:     response = requests.get(URL, timeout=10)    response.raise_for_status()    with open(パス, 'wb') as fw:        for chunk in response.iter_content(chunk_size=100000):            fw.write(chunk)    print(f'{URL} のダウンロードが成功しました')except RequestException as e:    print(f'{URL} のダウンロード中にエラーが発生しました: {e}')
0
カバー画像

JavaScript

実行 同期driver.execute_script("同期処理;") 非同期driver.set_script_timeout(タイムアウトの秒数)driver.execute_async_script("非同期処理;")driver.execute_async_script("""    const callback = arguments[arguments.length - 1];    処理    callback();""")※ タイムアウトの秒数のデフォルトは0秒なので必ず指定する    callbackを呼び出して非同期処理を完了する引数driver.execute_script("スクリプト;", 引数1, ...)引数は arguments配列 でアクセスできるex) 引数1: arguments[0]戻り値戻り値 = driver.execute_script("return 値;") 非同期戻り値 = driver.execute_async_script("""    const callback = arguments[arguments.length - 1];    処理    callback(値);""")
0
カバー画像

フォーム

送信送信ボタン.click()フォーム内の要素.submit()
0
カバー画像

マウス

Importfrom selenium.webdriver import ActionChainsクリックelem.click()ドラッグ&ドロップ  要素をターゲットにD&D action_chains = ActionChains(driver) action_chains.drag_and_drop(要素, ターゲット)action_chains.perform()
0
カバー画像

ページ

Importfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.common.keys import Keysfrom selenium.webdriver.support import expected_conditions as ECfrom selenium.webdriver.support.wait import WebDriverWaitスクロールpage = driver.find_element(By.TAG_NAME, "html") 先頭page.send_keys(Keys.HOME)  末尾page.send_keys(Keys.END)  上へpage.send_keys(Keys.PAGE_UP)  下へpage.send_keys(Keys.PAGE_DOWN)ウィンドウサイズ Getsize = driver.get_window_size()  xsize["width"]   ysize["height"] Setdriver.set_window_size(x, y)   最大化driver.maximize_window()ウィンドウ位置 Getposition = driver.get_window_position()   xposition["x"]  yposition["y"]  Setdriver.set_window_position(x, y)フォーカスの移動 デフォルトdriver.switch_to.default_content() 
0
カバー画像

ブラウザ

Importfrom pathlib import Path移動 URLdriver.get(URL)ローカルのHTMLファイルのURLHTML_FILE = Path("HTMLファイルのパス").resolve()URL = f"file://{HTML_FILE}" 戻るdriver.back()  進むdriver.forward()閉じるすべてdriver.quit()アクティブなタブやウィンドウdriver.close()更新driver.refresh()
0
カバー画像

要素

取得最初elem = driver.find_element(ロケータ, "対象")全部elem_list = driver.find_elements(ロケータ, "対象")見つからなかったら [] を返すロケータXPath from selenium.webdriver.common.by import ByBy.XPATHCSSセレクタ from selenium.webdriver.common.by import ByBy.CSS_SELECTORID from selenium.webdriver.common.by import ByBy.IDクラス from selenium.webdriver.common.by import ByBy.CLASS_NAMEname属性 from selenium.webdriver.common.by import ByBy.NAME<form>内の<input>に対して使うタグ from selenium.webdriver.common.by import ByBy.TAG_NAMEリンクテキスト  部分一致 from selenium.webdriver.common.by import ByBy.PARTIAL_LINK_TEXT 完全一致 from selenium.webdriver.common.by import ByBy.LINK_TEXT値テキストelem.textタグ名elem.tag_name属性 elem.get_attribute("属性")HTMLelem.get_att
0
カバー画像

selenium

Importfrom selenium import webdriver from selenium.webdriver.edge.options import Optionsfrom selenium.webdriver.support.wait import WebDriverWaitWAIT_SECONDS = 10作成 Edgewith webdriver.Edge() as driver:    wait = WebDriverWait(driver, WAIT_SECONDS)driver = webdriver.Edge() wait = WebDriverWait(driver, WAIT_SECONDS)  ヘッドレスモード   ※デフォルトのサイズが小さいので指定するoptions = Options() options.add_argument("--headless")options.add_argument("--window-size=1920,1080")driver = webdriver.Edge(options=options)wait = WebDriverWait(driver, WAIT_SECONDS)設定 要素取得時の最大待機時間driver.implicitly_wait(WAIT_SECONDS)Installpip install selenium
0
29 件中 1 - 29