ラベル selenium の投稿を表示しています。 すべての投稿を表示
ラベル selenium の投稿を表示しています。 すべての投稿を表示

2019年9月17日火曜日

Pythonでselenium 要素の存在を判定する方法

Seleniumで存在しない要素を使うと、Message: Unable to locate element:xxx のエラーが起きます。
事前に要素の存在をチェックしておきたいですね。

たまに以下のようなtryで例外処理をする方法をみかけますが、実はlenでも判定することはできます。

try:
    driver.find_element_by_id('test').click()
except:
  # 存在しない
ポイントはdriver.find_element_by_idの代わり、driver.find_elements_by_idを使います。一見同じように見えますが、前者の場合は要素が存在しない時に異常が発生します。後者なら、要素が存在しなくでも異常が発生しないです。
具体的に以下ように使います。

if len(driver.find_elements_by_id('test') > 0) :
    ele = driver.find_element_by_id('test')
 # 存在する時の処理
else:
  # 存在しない時の処理
driver.find_elements_by_idの他、driver.find_elements_by_namedriver.find_elements_by_xpathdriver.find_elements_by_class_namedriver.find_elements_by_css_selectordriver.find_elements_by_link_textdriver.find_elements_by_tag_nameなどなどが存在します。基本的にfind_element_by_xxとセットとなっています。

2019年8月16日金曜日

pythonとseleniumを使用して確実にページの先頭にスクロールする方法

調べればたくさん方法があると思いますが、何回試したがうまくいかなかったです。
最後辿り着くのが以下の通りでした。

driver = webdriver.Firefox()
driver.execute_script("window.scrollTo(0, 0);")

2019年7月8日月曜日

PythonでSeleniumのclickメソッドは効かない

PythonでSeleniumのclickメソッドがどうしても効かない問題に遭遇しました。

最初に使ったソースコードは以下の通りです。

from selenium import webdriver
driver = webdriver.Firefox()
driver.get('https://xxxxx/')  # 自分の検証サイトのURL
submit = driver.find_element_by_id("submitbutton")
submit.click()


調べたところ、要素はブラウザー上にクリックできない場所に存在している可能性があります。

でしたら、ブラウザーを最下部に移動してみようと考えました。

以下のコードを使って、最下部にスクロールしました。

driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

再度検証したところだめでした。


再度調査したら、Seleniumが介在せずそのまま実行するならうまくいくかもしれませんの情報がありました。

Seleniumで直接javascriptを実行し、ボタンをクリックします。

driver.execute_script("document.getElementById('submitbutton').click();")

検証したところ、だめでした。

「ENTER」キーならうまくいった情報もありましたので、

「ENTER」キーを使ってクリックします。

submit.send_keys(Keys.ENTER)

結果としてだめでした。

気分を取り直して、要素に焦点を当たってからクリックするのも検証しました。

要素に焦点を当たります

ActionChains(driver).move_to_element(submit).perform()

それでもだめでした。

最後に辿り着いたのは「submit」メソッドでした。

driver.submit()

やっとうまくいきました。

フォームの中のボタン、クリックメソッドを使うより、サブミットの方がいいらいいです。

2019年4月4日木曜日

MacにChrome webdriveのインストール方法

Pythonでseleniumを使ってみようと思ったら、以下のソースコードを実行してみたら、WebDriverのパスが見つからないのエラーができました。→ 「
selenium.common.exceptions.WebDriverException: Message: 'chromedriver' executable needs to be in PATH. Please see https://sites.google.com/a/chromium.org/chromedriver/home
#encoding:utf-8
from selenium import webdriver
 
browser = webdriver.Chrome()
browser.get('http://google.co.jp')
調べたところ、まずChrome webdriveをインストールしておくが必要でした。
chromedriveのオフィシャルサイトInstall SafariDriver on macOS からダウンロードし、とりあえず$HOME/Download/直下に置きました。
ソースコードを以下のように修正し、問題なく実行できました。
※「executable_path」に、先程ダウンロードしたファイルの場所を入れる
※ もし必要であれば、chromedriver の実行権限も変更
#encoding:utf-8
from selenium import webdriver
 
browser = webdriver.Chrome(executable_path='$HOME/Download/chromedriver')
browser.get('http://google.co.jp')

上記することで、以下の2つのエラーを解消できました。
selenium.common.exceptions.WebDriverException: Message: 'library' executable may have wrong permissions for ChromeDriver
selenium.common.exceptions.WebDriverException: Message: 'chromedriver' executable needs to be in PATH. Please see https://sites.google.com/a/chromium.org/chromedriver/home

2016年9月30日金曜日

java seleniumでinput テキストボックスの値をクリアする方法

たまに<input type="text">要素の値をクリアしたいときがあります。

クリアする方法は以下の二種類があります。

① element.sendKeys(Keys.chord(Keys.CONTROL, "a"), "");
  上記のコードを簡単に説明:まずテキストを前選択、そして空の文字をリプレースします。
  もちろん以下のコードも効きます。
  element.sendKeys(Keys.HOME,Keys.chord(Keys.SHIFT,Keys.END),"");
②  element.clear()
  element.sendKeys("Some text here")
  方法二はとても理解しやすいと思います。単純にクリアしてから自分が入れたい文字を入れればいい