我想从表格中的页面中抓取一些数据。所以我只为表中的数据而烦恼。之前我使用过Mechanize,但有时发现某些数据丢失了,尤其是在表格的底部。谷歌搜索,我发现这可能是由于机械化无法处理Jquery / Ajax。
所以我今天改用selenium。我该如何等待一个只有一个表完全加载,然后使用Selenium和python从该表中提取所有链接?如果我等待整个页面加载,则需要一些时间。我想确保仅加载表中的数据。我当前的代码:
驱动程序= webdriver.Firefox() 对于范围(1、2)中的页面: driver.get(“ http://somesite.com/page/” + str(page)) 表格= driver.find_element_by_css_selector('div.datatable') 链接= table.find_elements_by_tag_name('a') 对于链接中的链接: 打印link.text
使用WebDriverWait要等到表位于:
WebDriverWait
from selenium.webdriver.common.by import By from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC ... wait = WebDriverWait(driver, 10) table = wait.until(EC.presence_of_element_located(By.CSS_SELECTOR, 'div.datatable'))
这将是 明显的等待 。
或者,您可以使驱动程序 隐式等待 :
隐式等待是告诉WebDriver在尝试查找一个或多个元素(如果不是立即可用)时轮询DOM一定时间。默认设置为0。设置后,将在WebDriver对象实例的生存期内设置隐式等待。
from selenium import webdriver driver = webdriver.Firefox() driver.implicitly_wait(10) # wait up to 10 seconds while trying to locate elements for page in range(1, 2): driver.get("http://somesite.com/page/"+str(page)) table = driver.find_element_by_css_selector('div.datatable') links = table.find_elements_by_tag_name('a') for link in links: print link.text