Selenium ChromeDriverで「名前をつけて画像を保存」をしたいです。
Selenium ChromeDriverで
画像アドレスの画像を右クリックメニューから「名前をつけて画像を保存」したいです。
実際には、ログインが必要なサイトを想定しています。
【環境】
端末:macbook Air
アプリケーション:eclipse
OS:mac OS
https://stackoverrun.com/ja/q/5548579
を参考にしたのですがダウンロードできず。。。
実行後は、添付画像の様な画面まで表示確認でき、
send_keys(Keys.ARROW_DOWN)が実行されたか不明です。
右クリックメニューの「名前をつけて画像を保存」をするためにはどこを修正すればいいのでしょうか?
ソースコード
Python
1from selenium import webdriver 2import time 3from selenium.webdriver.common.action_chains import ActionChains 4from selenium.webdriver.common.keys import Keys 5 6browser = webdriver.Chrome(executable_path='/usr/local/Caskroom/chromedriver/78.0.3904.70/chromedriver') 7loginUrl = 'https://hoshi3.jp/img/btn_01.png' 8browser.get(loginUrl) 9 10img = browser.find_element_by_xpath("/html/body/img") 11 12actions = ActionChains(browser) 13actions.context_click(img).perform() 14actions.send_keys(Keys.ARROW_DOWN).send_keys(Keys.ARROW_DOWN).perform() 15actions.send_keys(Keys.ENTER).perform() 16time.sleep(5) 17 18browser.quit()
追記
1.質問補足
画像のURLを得て、Selenium の外でダウンロードというのは、ガードされているのでしょうか?
取得したい画像が無数にあるのでSelenium内でfor文で処理しようと思っています。
2.回答補足
ActionChainsを使わなくても、
urlretrieveを使えばDLできます。
Python
1loginUrl = 'https://hoshi3.jp/img/btn_01.png' 2urllib.request.urlretrieve(loginUrl, 'logo.png')
上記コードで画像の取得はできましたが、
実際に取得したい画像が、ログインが必要なサイトの画像のため実行すると、
urllib.error.HTTPError: HTTP Error 500: Internal Server Error
が出力されます。
Cookieを付与すれば解決すると思いますが、今回はwebdriverの仕様理解の勉強も含めているため、
webdriver上で画像ダウンロードできる方法を模索しています。
3.質問補足
後から質問補足見ました。やっぱりログインでガードされているんですね。駄目か。
そうすると、そもそもダウンロードしていいものかどうかも気になりますが、大丈夫ですか?
今回のスクレイピングは、
私用目的でターゲットサイトの利用規約にも遵守しています。
回答2件
あなたの回答
tips
プレビュー