我试着不要等到整个页面加载完毕。就我而言WebDriverWait
应该提供帮助,所以我尝试将它放入我的代码中,但有些东西我不知道,因为它引发TimeoutException
虽然我可以看到标签
self.driver.get('http://www.quoka.de/')
self.wait.until(EC.invisibility_of_element_located((By.ID, 'search1')))
self.driver.find_element_by_id("search1").send_keys('nachhilfe')
self.driver.find_element_by_id('searchbutton').click()
所以它打开Firefox,然后等到页面加载。这是我正在寻找的标签:
<input id="search1" name="search1" class="form-control" placeholder="Was suchst du?" value="" type="text">
Firefox已经加载了此标记,但它仍然等待整个页面。你有什么建议吗?
编辑:就我而言,这一行self.wait.until(EC.invisibility_of_element_located((By.ID, 'search1')))
应该让Firefox等到标签可见,并且在加载这个标签之后它应该继续使用另一行代码。
答案 0 :(得分:0)
试试这个:
self.driver.get('http://www.quoka.de/')
self.wait.until(EC.presence_of_element_located((By.ID, 'search1')))
self.driver.find_element_by_id("search1").send_keys('nachhilfe')
self.driver.find_element_by_id('searchbutton').click()
invisibility_of_element_located在DOM中等待元素不可见或不存在! 据我了解你的问题,你想要完全相反。所以请尝试使用presence_of_element_located。
请注意find_element_by_id也需要一些时间。因此,只要元素对用户可见,就不会立即成为send_keys。
衡量这段时间你可以尝试一下:
import time
start = time.time()
self.driver.get('http://www.quoka.de/')
self.wait.until(EC.presence_of_element_located((By.ID, 'search1')))
end = time.time()
print end-start
start = time.time()
element = self.driver.find_element_by_id("search1")
end = time.time()
print end-start
element.send_keys('nachhilfe')
self.driver.find_element_by_id('searchbutton').click()