selenium无法获得属性值的更改

时间:2017-06-28 10:20:43

标签: python selenium click

我使用selenium抓取页面数据,应该在页面上执行某些操作,如下所示: 1.找到一个元素并单击它,点击调用js功能 2.以上js功能改变标签a的href阀门,我应该得到新的href。 但是,我失败了,href值保持不变!这是代码pices。

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

1 个答案:

答案 0 :(得分:0)

恕我直言,你不是在等待href改变,只是询问它是否已经改变。 href可能需要一段时间才能更改。你可以通过询问它是否已经改变了很多次来模拟等待,如果不是一次等待一秒钟。伪代码看起来像它:

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;