2016-09-14 22 views
0

私の目標は、Selenium for Pythonを使用してオンライン請求書支払いを自動化することです。Selenium WebdriverでWebサイトをナビゲートする

ログインは、このコードでwebdriverを使用して成功しました:

from selenium import webdriver 
browser = webdriver.Firefox() 
browser.get('https://website.com/Home') 
emailElem = browser.find_element_by_id('UserName') #finds login username field 
emailElem.send_keys('username') #enter the username 
passwordElem = browser.find_element_by_id('UserPassword') #finds pw field 
passwordElem.send_keys('password') #enters pw 
passwordElem.submit() #presses submit button 

ログインした後、新しいページがロードさを、そして私の次のステップは、リンクをクリックすることです。コード:

browser.implicitly_wait(3) #allow new page to load (also tried 5 seconds) 
click_link = browser.find_element_by_link_text("Bill & Payment") 
click_link.click() 

何も起こりません。請求&支払いページへのナビゲーションはありません。実際のリンクはそれで<BR>タグを持っているので、私はまた、タグを含めてみました:

click_link = browser.find_element_by_link_text("Bill &<BR>Payment") 

しかし、まだ何もありません。私は何を試してみるべきですか?

エラー:

トレースバック(最新の呼び出しの最後): でファイル "/home/captain/.PyCharmEdu30/config/scratches/scratch_1.py"、12行目、click_link = browser.find_element_by_link_text ( "Bill & Payment")#クリックすると次のページにリンクします

ファイル "/home/captain/.local/lib/python3.5/site-packages/selenium/webdriver/remote/webdriver.py"、行317 、in find_element_by_link_text return self.find_element(by = LINK_TEXT、value = link_text)

ファイル "/home/captain/.local/lib/python3.5/site-packages/selenium/webdriver/remote/webdriver.py"、752行目、find_element 'value':value})['value 「]

ファイル "/home/captain/.local/lib/python3.5/site-packages/selenium/webdriver/remote/webdriver.py"、ライン236に(応答 self.error_handler.check_responseを実行します)

check_response レイズexception_class(メッセージ、画面、スタックトレースでは、ライン192、

ファイル "/home/captain/.local/lib/python3.5/site-packages/selenium/webdriver/remote/errorhandler.py" ) selenium.common.exceptions.NoSuchElementException:メッセージ/// TMP/tmps7uj9u0l /拡張:FirefoxDriver.prototype.findElementInternal_(ファイルで :{ "方法": "リンクテキスト"、 "セレクタ": "ビル&支払い"}

スタックトレース:要素が見つかりません/[email protected]/components/driver-component.js:10770) (fxdriver.Timer.prototype.setTimeout/<).notify(ファイル:///tmp/tmps7uj9u0l/extensions/[email protected]/components/ driver-component.js:625)

+0

あなたはすべてのエラーを取得していますか? – alecxe

+0

このリンクをHTMLでも共有できますか? –

+0

エラーが追加されました。ありがとう – pythonomicon

答えて

1

エラーは、探している要素がページにないことです。 Seleniumでの私の経験では、css selectorsがウェブサイトでインタラクティブに最もよく動作することがわかりました。

from selenium import webdriver 
browser = webdriver.Firefox() 
browser.get('https://website.com/Home') 
element = "what you want to test here" 
driver.find_element_by_id(element).click() 

そして、あなたはちょうど保つ要素の値を変更し、限り、あなたは保つようラインを実行することができます:あなたがで要素のために良いフック値を持っている場合もテストするために、コマンドラインからのpythonを実行することができますPythonインタプリタを開きます。

click_link =ドライバを使用する

from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as ec 

time = 10 # Wait for 10 seconds 
by = By.CSS_SELECTOR # The type of hook the element is 
hook = "css.selector.here" # The value for the hook (could also be xpath, name, id, etc.) 
# Waits until either the element specified by variables by and hook is  
# In the page, or the value of time seconds has passed. 
WebDriverWait(self.driver, time).until(ec.presence_of_element_located((by, hook))) 
driver.find_element(by, hook).click() 
+0

私は要素のIDを見つけることができませんでしたので、私はfind_element_by_partial_link_textメソッドと一緒に行きました。さて、ボックスをチェックする方法を見つけることに。 – pythonomicon

+0

あなたはそれを理解してうれしい! – Brydenr

0

試してみてください。問題は、セレンは十分な長さのページがロードされるのを待たないことにあると思われる場合は

、あなたはいつものように待機方法を試すことができます

click_link.click()

1

ドキュメントは、通常、私は従うことはあまりにも技術的ですが、それはかなりstraigた.find_element_by_xpath(「オンライン請求書給与」リンクのeg.xpath) Selenium Python Bindingsのhtforwardです。

リンクテキストにいくつかの書式があるため、部分リンクテキストメソッドを使用していました。 the documentationから

例:

continue_link = driver.find_element_by_partial_link_text('Conti') 
関連する問題