2017-06-28 9 views
0

セレンを使用してページデータをクロールします。 のページで何らかのアクションを実行する必要があります。1.要素を見つけてクリックします。クリックコールはjsの機能です 2. above js関数の変更タグのhrefバルブ、私は新しいhrefを取得する必要があります。 しかし、私は失敗しました、href値はすべて同じままです!コードピースはここにあります。セレンは属性値を変更できません

class wait_for_href_changed(object): 
def __init__(self, locator, old): 
    self.locator = locator 
    self.href = old 

def __call__(self, driver): 
    try: 
     element_href = EC._find_element(driver, self.locator).get_attribute('href') 
     return element_href != self.href 
    except : 
     return False 

.....

for i in range(1,3): 
     for j in range(1,10): 
      try: 


       old_href = self.driver.find_element_by_xpath('//*[@id="mainTable"]/tbody[1]/tr/td/table/tbody/tr/td[1]/table/tbody/tr/td[2]/a').get_attribute('href') 
       nexts = self.driver.find_element_by_xpath('//*[@id="secTable"]/tbody/tr['+str(i)+']/td['+str(j)+']') 
       nexts.click() 

       #self.driver.execute_script('arguments[0].click()',nexts) 

       element = WebDriverWait(self.driver, 10).until(
        wait_for_href_changed((By.XPATH, '//*[@id="mainTable"]/tbody[1]/tr/td/table/tbody/tr/td[1]/table/tbody/tr/td[2]/a'),old_href)) 

       target = element.get_attribute('href') 

       yield Request(target,callback=self.parse2) 

      except: 
       break 

答えて

0

は私見あなたはそれが変更された場合、一度だけ求めて、変更するには、hrefのを待っていません。 hrefが変更されるまでには時間がかかることがあります。あなたは、何度も変更されたかどうかを尋ねて、一度に2秒待っていない場合は、待機をシミュレートすることができます。疑似コードは次のようになります。

int secs_to_wait := 5 
int secs_waited := 0 

while secs_waited < secs_to_wait do: 

    element_href = EC._find_element(driver,self.locator).get_attribute('href') 
    if element_href != self.href then: 
     return true 
    end if 

    Thread.Sleep(1000) 
    secs_waited++ 
end while 

return false; 
関連する問題