我使用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
答案 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;