2017-04-05 12 views
2

Webページ私は自動化しようとしています100以上のリンク(教師の名前)のリストが含まれています。私の仕事は、各リンクをクリックして、生徒情報が(同じページに)読み込まれ、ブラウザの戻るボタンをクリックし、最後のリンク(教師の名前)の最後まで2番目の教師の名前をクリックすることです。コード上xpathで要素を見つけてループして見つかった各要素をクリック

from selenium import webdriver 
import time 
driver=webdriver.Ie() 
driver.get('I load my main page') 
tablecontent=driver.find_elements_by_xpath("//table/tbody/tr/td/a") #see html code provided below 
tablelen=len(tablecontent) #find number of links on main page. 
#loop through each link 
for i in range(2,tablelen): 
    driver.find_element_by_xpath("//table/tbody/tr[i]/td/a").click() #plug in i value to tr 
    time.sleep(2) 
    driver.back() 

Iはtr[2](または括弧内の任意の整数値)によってtr[i]を交換した場合、エラー

Traceback (most recent call last): 
    File "C:/Python27/syn_xpath.py", line 14, in <module> 
    driver.find_element_by_xpath("//table/tbody/tr[i]/td/a").click() 
NoSuchElementException: Message: Unable to find element with xpath == //table/tbody/tr[i]/td/a 

下に生成し、それは要素を認識し、それをクリックします。たとえば、driver.find_element_by_xpath("//table/tbody/tr[2]/td/a").click()は問題なく動作します。 iforループ内)経由で整数値をtrに渡す理由は何ですか?

HTMLコード:

<table> 
<tr><td nowrap><b>Teacher</b></td><td nowrap><b>School</b></td></tr> 
<tr><td><a href="/db/status.php?teacherid=1234">Teacher1</a></td><td>XYZ High School</td></tr> 
<tr><td><a href="/db/status.php?teacherid=5678">Teacher2</a></td><td>ABC School</td></tr> 
<tr><td><a href="/db/status.php?teacherid=1111">Teacher3</a></td><td>International School</td></tr> 
+1

コードがコード – Gary99

答えて

1

を変えました。それはなどのxpath、ないtr[1]tr[i]を置く文字通りある

"//table/tbody/tr[i]/td/a" 

これにより

代わり

driver.find_element_by_xpath("//table/tbody/tr[i]/td/a").click() 

のやる

x_path = "//table/tbody/tr[{0}]/td/a".format(i) 
driver.find_element_by_xpath(x_path).click() 

これは、文字列の{1}を書式関数で指定した値に置き換えます。この場合、{1}1,2などに置き換え、xpathセレクタを期待どおりに動作させます。

-1

例:

search_result1 = sel.find_element_by_xpath("//a[not((//div[contains(@class,'s')]//div[contains(@class,'kv')]//cite)[1])]|((//div[contains(@class,'s')]//div[contains(@class,'kv')]//cite)[1])").text 

search_result2 = sel.find_element_by_xpath("//a[not((//div[contains(@class,'s')]//div[contains(@class,'kv')]//cite)[2])]|((//div[contains(@class,'s')]//div[contains(@class,'kv')]//cite)[2])").text 


search_results=[] 
for i in range(1,11) #I am assuming 10 results in a page so you can set your own range 
    result=sel.find_element_by_xpath("//a[not((//div[contains(@class,'s')]//div[contains(@class,'kv')]//cite)[%s])]|((//div[contains(@class,'s')]//div[contains(@class,'kv')]//cite)[%s])"%(i,i)).text 
    search_results.append(result) 

だから私はあなたのコードは、あなたがXPath文字列をフォーマットする必要が

driver.find_element_by_xpath("//table/tbody/tr[%s]/td/a")%(i).click() 
+0

として表示されるように書式を設定してください。あなたの括弧はうんざりです。 '%'の周りのものを削除してください: 'driver.find_element_by_xpath(" // table/tbody/tr [%s]/td/a "%i).click()' –

関連する問題